Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-08-01 09:09 UTC

MaastrichtU-IDS / rustdl

Rust-based OWL DL reasoner

RustApache-2.0★ 7 stars⑂ 4 forkssince May 2026View on GitHub ↗

MaastrichtU-IDS/rustdl holds a health index of 55 out of 100, placing it in the Moderate band. It scores highest on Vitality (73/100) and lowest on Security (28/100). It was last updated today. A single contributor accounts for most of its recent work.

55
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

55
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

77 followers217 public repossince Feb 2018

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

73Good · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
7.6/36Commit cadence — 11/52 weeks with commits
18/18Commit volume — 1,489 commits in the last year
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Inputs used
commits_last_year1,489
human_commit_share0.96
days_since_last_push0
active_weeks_last_year11
How it's scored
27/27Ships releases — 50 releases published
36/36Release recency — latest release 0 days ago
27/27Release cadence — a release every ~0.9 days
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count50
latest_release_tagv0.4.9
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases0.9

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

41At risk · 18% of overall
How it's scored
12.6/60Stars — 7 stars
4/25Forks — 4 forks
0/15Watchers — 1 watchers
Inputs used
forks4
stars7
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (Apache-2.0)
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
How it's scored
53.2/80Monthly downloads — 9,827 downloads/month across crates, pypi
0/20Registry dependents — not reported by this ecosystem
Inputs used
packagesowl-dl-cli, owl-dl-core, rustdl, owl-dl-tableau, owl-dl-reasoner
dependents
ecosystemscrates, pypi
total_downloads665
monthly_downloads9,827
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

61Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0/22.5Commit distribution — top contributor authored 100% of commits
1.4/13.5Contributor breadth — 1 contributors
10/10OpenSSF Scorecard: Contributors — project has 7 contributing companies or organizations
Inputs used
bus_factor1
contributors_sampled1
top_contributor_share1
How it's scored
38.5/46.8Issue resolution — 82% of issues closed
32.5/38.3PR acceptance — 34/40 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs34
open_issues3
closed_issues14
issue_closed_ratio0.824
closed_unmerged_prs6
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
13.6/25Owner reach — 77 followers of MaastrichtU-IDS
25/25Track record — 217 public repos, account ~8 yr old
Inputs used
followers77
owner_typeOrganization
is_verified
owner_loginMaastrichtU-IDS
public_repos217
account_age_days3,095
How it's scored
25/25Published & resolvable — 5 package(s) on crates, pypi
35/35Publish recency — latest publish 0 days ago
20/20Version history — 50 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesowl-dl-cli, owl-dl-core, rustdl, owl-dl-tableau, owl-dl-reasoner
ecosystemscrates, pypi
any_deprecatedno
min_days_since_publish0

Engineering Quality

Are baseline engineering and documentation practices in place?

62Moderate · 20% of overall
How it's scored
24/24CI workflows — 5 workflow(s)
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — no data
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.

Documentation

65Moderate
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
0/10Topics
0/10Wiki
Inputs used
topics
has_wikino
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

28Critical · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — no data
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 7 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
1/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 21 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate2.8
Excluded from scoring (no data or not applicable): ci_tests. Remaining weights renormalized.

AI Readiness

How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score.

73Good · 0% of overall
How it's scored
45/45Agent instructions — CLAUDE.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 94 of 96 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.979
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes103,216
How it's scored
12.6/18One-command bootstrap — Cargo.toml, crates/owl-dl-bench/Cargo.toml, crates/owl-dl-cb/Cargo.toml (toolchain convention, no task runner)
22/22Automated tests
0/11Lint / format config
11/11Static type checking — crates/owl-dl-py/python/rustdl/py.typed
10/10Reproducible environment — lockfile
10/10Demonstrated agent practice — 21 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
2/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
Inputs used
has_nixno
has_testsyes
lockfilesCargo.lock
has_dockerfileno
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configscrates/owl-dl-py/python/rustdl/py.typed
agent_commit_share0.21
toolchain_manifestsCargo.toml, crates/owl-dl-bench/Cargo.toml, crates/owl-dl-cb/Cargo.toml, crates/owl-dl-cli/Cargo.toml, crates/owl-dl-core/Cargo.toml, crates/owl-dl-datatypes/Cargo.toml, crates/owl-dl-py/Cargo.toml, crates/owl-dl-reasoner/Cargo.toml, crates/owl-dl-saturation/Cargo.toml, crates/owl-dl-tableau/Cargo.toml, protege/pom.xml, xtask/Cargo.toml
dependency_bot_commit_share0
How it's scored
45/45Type-checkable code — Rust (statically typed)
52.2/55Manageable file sizes — 12/239 source files over 60KB
Inputs used
primary_languageRust
largest_source_bytes388,832
source_files_sampled239
oversized_source_files12
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — examples
Inputs used
example_dirsexamples
has_mcp_signalno
api_schema_files

Key facts

7GitHub stars
1contributors
1,489commits, last 12 months
0days since last push
50releases
1bus factor
3open issues
crates.io, Mavenpackage ecosystems

Data collection warnings

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch maven package 'nl.maastrichtuniversity.ids:rustdl-protege' from its registry
  • crates package 'xtask' points at a different repository (https://github.com/arcboxlabs/xtask); excluded from ecosystem scoring
  • Could not fetch crates package 'owl-dl-cb' from its registry
  • Could not fetch crates package 'owl-dl-py' from its registry
  • Could not fetch crates package 'owl-dl-bench' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index pypi:rustdl@0.4.9; advisories assessed against the repository dependency graph instead

More detail

Star and fork history 0 ★ / 4 ⇿
0Stars
4Forks
24Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

1223344412026-062026-072026-07
Major 0Minor 0Patch 24
OpenSSF Scorecard 2.8 / 10
2.8aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-08-01 09:09 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/aCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
10Contributorsproject has 7 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
2Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 2
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities21 existing vulnerabilities detected
Direct dependencies 77
RegistryPackageVersion constraintManifest
Mavencom.google.code.gson:gson${gson.version}protege/pom.xml
Mavennet.sourceforge.owlapi:owlexplanation${owlexplanation.version}protege/pom.xml
Mavennet.sourceforge.owlapi:telemetry${telemetry.version}protege/pom.xml
Mavenorg.liveontologies:puli${puli.version}protege/pom.xml
Mavenorg.liveontologies:owlapi-proof${owlapi-proof.version}protege/pom.xml
Mavenorg.liveontologies:protege-proof-explanation${protege-proof-explanation.version}protege/pom.xml
Mavenio.github.liveontologies:protege-proof-justification${protege-proof-justification.version}protege/pom.xml
crates.ioclapxtask/Cargo.toml
crates.ioanyhowxtask/Cargo.toml
crates.ioowl-dl-reasonercrates/owl-dl-bench/Cargo.toml
crates.ioowl-dl-corecrates/owl-dl-bench/Cargo.toml
crates.ioowl-dl-saturationcrates/owl-dl-bench/Cargo.toml
crates.iohorned-owlcrates/owl-dl-bench/Cargo.toml
crates.ioclapcrates/owl-dl-bench/Cargo.toml
crates.ioanyhowcrates/owl-dl-bench/Cargo.toml
crates.ioserdecrates/owl-dl-bench/Cargo.toml
crates.ioserde_jsoncrates/owl-dl-bench/Cargo.toml
crates.iowalkdircrates/owl-dl-bench/Cargo.toml
crates.iosha20.10crates/owl-dl-bench/Cargo.toml
crates.iotracingcrates/owl-dl-bench/Cargo.toml
crates.iotracing-subscribercrates/owl-dl-bench/Cargo.toml
crates.iowhelkcrates/owl-dl-bench/Cargo.toml
crates.iopprof0.14crates/owl-dl-bench/Cargo.toml
crates.ioowl-dl-corecrates/owl-dl-cb/Cargo.toml
crates.iohashbrowncrates/owl-dl-cb/Cargo.toml
crates.ioowl-dl-corecrates/owl-dl-cli/Cargo.toml
crates.ioowl-dl-reasonercrates/owl-dl-cli/Cargo.toml
crates.iohorned-owlcrates/owl-dl-cli/Cargo.toml
crates.ioclapcrates/owl-dl-cli/Cargo.toml
crates.ioanyhowcrates/owl-dl-cli/Cargo.toml
crates.ioserdecrates/owl-dl-cli/Cargo.toml
crates.ioserde_jsoncrates/owl-dl-cli/Cargo.toml
crates.iotracingcrates/owl-dl-cli/Cargo.toml
crates.iotracing-subscribercrates/owl-dl-cli/Cargo.toml
crates.iohorned-owlcrates/owl-dl-core/Cargo.toml
crates.iohashbrowncrates/owl-dl-core/Cargo.toml
crates.iosmallveccrates/owl-dl-core/Cargo.toml
crates.iobitveccrates/owl-dl-core/Cargo.toml
crates.iobumpalocrates/owl-dl-core/Cargo.toml
crates.iothiserrorcrates/owl-dl-core/Cargo.toml
crates.iotracingcrates/owl-dl-core/Cargo.toml
crates.ioowl-dl-corecrates/owl-dl-datatypes/Cargo.toml
crates.iothiserrorcrates/owl-dl-datatypes/Cargo.toml
crates.iotracingcrates/owl-dl-datatypes/Cargo.toml
crates.iopyo30.29crates/owl-dl-py/Cargo.toml
crates.ioowl-dl-reasonercrates/owl-dl-py/Cargo.toml
crates.ioowl-dl-corecrates/owl-dl-py/Cargo.toml
crates.iohorned-owlcrates/owl-dl-py/Cargo.toml
crates.iothiserrorcrates/owl-dl-py/Cargo.toml
crates.ioanyhowcrates/owl-dl-reasoner/Cargo.toml
crates.ioowl-dl-corecrates/owl-dl-reasoner/Cargo.toml
crates.ioowl-dl-saturationcrates/owl-dl-reasoner/Cargo.toml
crates.ioowl-dl-tableaucrates/owl-dl-reasoner/Cargo.toml
crates.ioowl-dl-datatypescrates/owl-dl-reasoner/Cargo.toml
crates.iohorned-owlcrates/owl-dl-reasoner/Cargo.toml
crates.iorayoncrates/owl-dl-reasoner/Cargo.toml
crates.iodashmapcrates/owl-dl-reasoner/Cargo.toml
crates.iofixedbitsetcrates/owl-dl-reasoner/Cargo.toml
crates.iothiserrorcrates/owl-dl-reasoner/Cargo.toml
crates.iotracingcrates/owl-dl-reasoner/Cargo.toml
crates.ioowl-dl-corecrates/owl-dl-saturation/Cargo.toml
crates.iohashbrowncrates/owl-dl-saturation/Cargo.toml
crates.iosmallveccrates/owl-dl-saturation/Cargo.toml
crates.iorayoncrates/owl-dl-saturation/Cargo.toml
crates.iodashmapcrates/owl-dl-saturation/Cargo.toml
crates.iofixedbitsetcrates/owl-dl-saturation/Cargo.toml
crates.iothiserrorcrates/owl-dl-saturation/Cargo.toml
crates.iotracingcrates/owl-dl-saturation/Cargo.toml
crates.ioowl-dl-corecrates/owl-dl-tableau/Cargo.toml
crates.ioowl-dl-datatypescrates/owl-dl-tableau/Cargo.toml
crates.ioowl-dl-saturationcrates/owl-dl-tableau/Cargo.toml
crates.iohashbrowncrates/owl-dl-tableau/Cargo.toml
crates.iosmallveccrates/owl-dl-tableau/Cargo.toml
crates.iobitveccrates/owl-dl-tableau/Cargo.toml
crates.iobumpalocrates/owl-dl-tableau/Cargo.toml
crates.iothiserrorcrates/owl-dl-tableau/Cargo.toml
crates.iotracingcrates/owl-dl-tableau/Cargo.toml
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 10624,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Java": 220010,
        "Rust": 3970126,
        "Shell": 61834,
        "Python": 83590
      },
      "pushed_at": "2026-08-01T09:03:20Z",
      "created_at": "2026-05-24T15:06:44Z",
      "owner_type": "Organization",
      "updated_at": "2026-08-01T09:03:31Z",
      "description": "Rust-based OWL DL reasoner",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Rust",
      "significant_languages": [
        "Rust"
      ]
    },
    "owner": {
      "blog": "https://www.maastrichtuniversity.nl/research/institute-data-science",
      "name": "Maastricht University IDS",
      "type": "Organization",
      "login": "MaastrichtU-IDS",
      "company": null,
      "location": "Maastricht, Netherlands",
      "followers": 77,
      "avatar_url": "https://avatars.githubusercontent.com/u/36262526?v=4",
      "created_at": "2018-02-08T10:06:57Z",
      "is_verified": null,
      "public_repos": 217,
      "account_age_days": 3095
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.4.9",
          "kind": "patch",
          "published_at": "2026-08-01T09:02:22Z"
        },
        {
          "tag": "v0.4.8",
          "kind": "patch",
          "published_at": "2026-08-01T06:10:42Z"
        },
        {
          "tag": "v0.4.7",
          "kind": "patch",
          "published_at": "2026-08-01T04:44:12Z"
        },
        {
          "tag": "v0.4.6",
          "kind": "patch",
          "published_at": "2026-07-31T05:55:30Z"
        },
        {
          "tag": "v0.4.5",
          "kind": "patch",
          "published_at": "2026-07-26T11:48:27Z"
        },
        {
          "tag": "v0.4.4",
          "kind": "patch",
          "published_at": "2026-07-25T17:44:37Z"
        },
        {
          "tag": "v0.4.3",
          "kind": "patch",
          "published_at": "2026-07-25T15:04:47Z"
        },
        {
          "tag": "v0.4.2",
          "kind": "patch",
          "published_at": "2026-07-24T15:28:10Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2026-07-24T15:15:25Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-07-24T14:22:08Z"
        },
        {
          "tag": "v0.3.41",
          "kind": "patch",
          "published_at": "2026-07-24T05:09:35Z"
        },
        {
          "tag": "v0.3.40",
          "kind": "patch",
          "published_at": "2026-07-23T21:02:55Z"
        },
        {
          "tag": "v0.3.39",
          "kind": "patch",
          "published_at": "2026-07-23T15:52:25Z"
        },
        {
          "tag": "v0.3.38",
          "kind": "patch",
          "published_at": "2026-07-23T11:52:12Z"
        },
        {
          "tag": "v0.3.37",
          "kind": "patch",
          "published_at": "2026-07-23T10:41:04Z"
        },
        {
          "tag": "v0.3.36",
          "kind": "patch",
          "published_at": "2026-07-23T09:21:36Z"
        },
        {
          "tag": "v0.3.35",
          "kind": "patch",
          "published_at": "2026-07-23T04:54:41Z"
        },
        {
          "tag": "v0.3.34",
          "kind": "patch",
          "published_at": "2026-07-22T15:59:49Z"
        },
        {
          "tag": "v0.3.33",
          "kind": "patch",
          "published_at": "2026-07-22T14:16:40Z"
        },
        {
          "tag": "v0.3.32",
          "kind": "patch",
          "published_at": "2026-07-22T08:30:25Z"
        },
        {
          "tag": "v0.3.31",
          "kind": "patch",
          "published_at": "2026-07-21T21:24:06Z"
        },
        {
          "tag": "v0.3.30",
          "kind": "patch",
          "published_at": "2026-07-21T15:42:30Z"
        },
        {
          "tag": "v0.3.29",
          "kind": "patch",
          "published_at": "2026-07-21T02:41:32Z"
        },
        {
          "tag": "v0.3.28",
          "kind": "patch",
          "published_at": "2026-07-20T18:34:01Z"
        },
        {
          "tag": "v0.3.27",
          "kind": "patch",
          "published_at": "2026-07-20T18:18:28Z"
        },
        {
          "tag": "v0.3.26",
          "kind": "patch",
          "published_at": "2026-07-20T10:34:54Z"
        },
        {
          "tag": "v0.3.25",
          "kind": "patch",
          "published_at": "2026-07-19T22:56:10Z"
        },
        {
          "tag": "v0.3.24",
          "kind": "patch",
          "published_at": "2026-07-19T14:53:41Z"
        },
        {
          "tag": "v0.3.23",
          "kind": "patch",
          "published_at": "2026-07-18T09:41:00Z"
        },
        {
          "tag": "v0.3.21",
          "kind": "patch",
          "published_at": "2026-07-02T20:45:54Z"
        },
        {
          "tag": "v0.3.20",
          "kind": "patch",
          "published_at": "2026-07-01T21:53:01Z"
        },
        {
          "tag": "v0.3.19",
          "kind": "patch",
          "published_at": "2026-06-29T19:01:16Z"
        },
        {
          "tag": "v0.3.18",
          "kind": "patch",
          "published_at": "2026-06-29T18:31:16Z"
        },
        {
          "tag": "v0.3.17",
          "kind": "patch",
          "published_at": "2026-06-27T22:49:59Z"
        },
        {
          "tag": "v0.3.16",
          "kind": "patch",
          "published_at": "2026-06-27T16:57:05Z"
        },
        {
          "tag": "v0.3.15",
          "kind": "patch",
          "published_at": "2026-06-27T09:43:21Z"
        },
        {
          "tag": "v0.3.14",
          "kind": "patch",
          "published_at": "2026-06-27T08:41:05Z"
        },
        {
          "tag": "v0.3.12",
          "kind": "patch",
          "published_at": "2026-06-22T20:17:03Z"
        },
        {
          "tag": "v0.3.11",
          "kind": "patch",
          "published_at": "2026-06-22T14:29:53Z"
        },
        {
          "tag": "v0.3.10",
          "kind": "patch",
          "published_at": "2026-06-22T14:34:37Z"
        },
        {
          "tag": "v0.3.8",
          "kind": "patch",
          "published_at": "2026-06-22T14:34:35Z"
        },
        {
          "tag": "v0.3.7",
          "kind": "patch",
          "published_at": "2026-06-22T14:34:34Z"
        },
        {
          "tag": "v0.3.6",
          "kind": "patch",
          "published_at": "2026-06-22T14:34:32Z"
        },
        {
          "tag": "v0.3.5",
          "kind": "patch",
          "published_at": "2026-06-22T14:34:31Z"
        },
        {
          "tag": "v0.3.4",
          "kind": "patch",
          "published_at": "2026-06-06T07:27:06Z"
        },
        {
          "tag": "v0.3.3",
          "kind": "patch",
          "published_at": "2026-06-05T23:42:46Z"
        },
        {
          "tag": "v0.3.2",
          "kind": "patch",
          "published_at": "2026-06-05T22:02:02Z"
        },
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2026-06-05T14:32:13Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-06-05T09:46:26Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-06-04T15:04:49Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "f8d733485c017bb1f5c2d0199b43a9074b8912d9",
          "body": null,
          "is_bot": true,
          "headline": "chore(protege): update.properties -> 0.4.9 [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-08-01T09:03:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e2ba9c53a696598a0fa70d9eb9df71a09cc3cfb",
          "body": "FP=0 is this project's absolute invariant and it was being violated. parse_float_oneof folded\nxsd:float and xsd:double into one f64-keyed `fo:` bucket, so\n`exists h.DataOneOf(\"1.0\"^^xsd:float)` and the xsd:double equivalent were reported EQUIVALENT.\nDistinct value spaces; they are not.\n\nVERIFIED IND\n[…]\noth await volume\nmeasurement because each emits more axioms -- the shape that caused the v0.3.29 conversion DNFs.\n\nGates: FP=0 net 11/11 VERIFIED closures exact; 1413 tests pass; fmt and clippy clean.",
          "is_bot": false,
          "headline": "release: v0.4.9 -- fix a FALSE POSITIVE (float/double DKey conflation)",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T08:58:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7f621aa7c9a75bd3f68ce011856c87d6007fe8da",
          "body": "… numeric DataOneOf buckets\n\nFP=0 is this project's absolute invariant, and it was being violated.\n\nTHE FALSE POSITIVE (unflagged fix -- a soundness bug is not opt-in). parse_float_oneof\nfolded xsd:float and xsd:double into ONE f64-keyed `fo:` bucket, so\n`exists h.DataOneOf(\"1.0\"^^xsd:float)` and `e\n[…]\n OFF pending a cost measurement: its disjointness half is O(k^2) per\ncomponent, the same shape that caused the v0.3.29 conversion DNFs, and no\nnumeric-DataOneOf-heavy ORE population has been measured.",
          "is_bot": false,
          "headline": "merge: FIX A FALSE POSITIVE (float/double DKey conflation) + seed the…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T08:48:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3543843811db9fe96ff062cacdd4530624d9e4e0",
          "body": "…at/double\n\nTwo soundness fixes in the DKey area.\n\n(1) D10-class COMPLETENESS bug, gated `RUSTDL_DKEY_ONEOF_SEED` (default OFF).\nThe numeric `DataOneOf` DKey buckets minted at convert.rs:~690 (`io:` / `fo:` /\n`deo:` / `dao:` / `dto:`) were NEVER collected into `seed_dkey_subsumptions`, so\nthey got n\n[…]\nLY. The canaries and the\nKonclude ∪ HermiT adjudication are what carry this fix.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "fix(dkey): seed the numeric DataOneOf buckets (D10 class) + split flo…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T08:46:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d172f88ae4ddb51e14e037ea37bd653d893fb5b3",
          "body": "…ult OFF)\n\nseed_disjoint_bucket::try_emit ran `emitted.insert(pair)` BEFORE the droppable test, so a\npair spanning two role components was permanently consumed by whichever component the\nBTreeMap reached first -- even when the OTHER component was the one able to consume it. The\naxiom was then silent\n[…]\nt left all six canaries green, so they pin the split's FP-safety but\nnot its volume bound. Benign today (the split is subtractive and documented as a cost bound)\nand recorded rather than papered over.",
          "is_bot": false,
          "headline": "merge: DKey disjointness emit-order fix (RUSTDL_DKEY_EMIT_ORDER, defa…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T08:33:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "903b5ea1afc9349bc571f4fac2d59ee16f81263d",
          "body": "…DL_DKEY_EMIT_ORDER, default OFF)\n\n`seed_disjoint_bucket::try_emit` claimed a pair in its `emitted` dedup set\nBEFORE consulting the collapse/broadcast split. The split is a PER-COMPONENT\njudgement, so a pair spanning two role components was permanently spent by\nwhichever the `BTreeMap` reached first\n[…]\n. Six canaries; 3 of 4 sabotages caught (the survivor\nis recorded in CLAUDE.md).\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "fix(dkey): emit disjointness from the component that can use it (RUST…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T08:32:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0315d9e41d628b2c9fef2a123ea2cdf7b91c780e",
          "body": null,
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main'",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T08:04:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ad7000fcf6d3e56201d2aa96c956fdeb45b59f2",
          "body": "R3 and R4 examined lib.rs:2958 the same day and reached opposite verdicts. Reading their\nprofiles again cannot settle it, because BOTH used RUSTDL_SAT_SEED=0 as the off-arm and that\nflag changes two things at once: it stops forcing the per-class index rebuild AND it removes\nthe seed clauses, shrinki\n[…]\nnds with silence read\nas data.\n\nArm C incidentally settles a second disagreement in the same function: R4 measured the\nper-class clauses.clone() at 1.82 ms/class (not a lever), R3 at 20.28% inclusive.",
          "is_bot": false,
          "headline": "spec: adjudicate the per-class ClauseIndexes rebuild with a THIRD arm",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T08:04:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "360384ecd05062a31a6ff6dd454d775ac74f9770",
          "body": "…eement\n\nRecords what shipped (two perf levers in 0.4.7, three correctness fixes in 0.4.8) against\nwhat remains, and promotes the R3-vs-R4 disagreement on lib.rs:2958 to its own section rather\nthan leaving it buried in a review file.\n\nThat disagreement matters because it is the largest unclaimed wal\n[…]\n One of them is wrong, and the amortizer already exists and is merely\nunwired for this path. Adjudicate before building -- three prior 'obvious' hotspots in this\narea were each refuted by measurement.",
          "is_bot": false,
          "headline": "docs: status through v0.4.8 + flag the one unresolved reviewer disagr…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T08:03:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "942b76105361b7b2258111403ba9c94f1625fee9",
          "body": null,
          "is_bot": true,
          "headline": "chore(protege): update.properties -> 0.4.8 [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-08-01T06:11:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6efa3a5aa7154eba1730b2f0b5ee33b99bdb1ef",
          "body": null,
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main'",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T06:07:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93b73f12a5c837519dc5a3955f1a86eff9168edb",
          "body": "FP=0 soundness net 11/11 VERIFIED, closures EXACT (galen 27997, notgalen 32739, sio 8904,\nore-10908 6001, wine 653, pizza 499, alehif 247, ro 158, ore-15672 142, sulo 51, bibtex 16).\nWorkspace tests 1396 passed / 0 failed; fmt and clippy -D warnings clean.\n\nRUSTDL_CLASSIFY_INCONSISTENCY -- classify \n[…]\nression only -- the canaries and the\nKonclude-union-HermiT adjudication carry that fix. Sabotage counts are reported as run, not\nas hoped (8 of 9 caught, and 4 of 6, with survivors explained in-code).",
          "is_bot": false,
          "headline": "release: v0.4.8 -- three correctness fixes, all default ON",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T06:06:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4853d092ad264603489d4f0040a1ea0e7b10eacc",
          "body": "… both default OFF)\n\nBoth are the D10 shape -- a fragment gate certifies the closure COMPLETE while the engine\nsilently DROPS the axiom, so the answer is wrong AND incomplete:false. Three have shipped here.\n\nBUG A (RUSTDL_EL_BOT_FILLER): is_el_concept admitted Bot as an exists-filler while the\nlower\n[…]\nT adjudication\nare what carry Bug B. Sabotage results are reported as run, not as hoped -- 8 of 9 caught for\nA and 4 of 6 for B, with the survivors explained in-code instead of the tests overclaiming.",
          "is_bot": false,
          "headline": "merge: two D10-class correctness fixes (EL Bot-filler, DKey post-NNF;…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T05:52:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b32c29fa90beda22447814ed8c11673cb7d58dd9",
          "body": "…ENCY, default OFF)\n\nclassify --json family.ofn reported \"consistent\": true with \"unsatisfiable\": [] while\n`rustdl consistent` on the SAME FILE reported inconsistent. Two CLI surfaces contradicting\neach other, on a KB that HermiT and Konclude both call inconsistent in under a second.\n\nCause: the top\n[…]\nonsistency\n({A<=Bot, B<=Bot} empties every named class yet has a non-empty domain). The test is that TOP\nis unsatisfiable, and the negative control pins it -- sabotaging that inference fails the test.",
          "is_bot": false,
          "headline": "merge: classify KB-inconsistency pre-check (RUSTDL_CLASSIFY_INCONSIST…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T05:52:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b3dfdc7341048ff3ed017a780082b285dab2ffc4",
          "body": "…L_DKEY_POST_NNF, default OFF)\n\nSecond D10-class correctness fix, and unlike the first this one is a completeness\nREGRESSION introduced by the two DKey gates — `RUSTDL_BOUNDED_DKEY_DISJOINT=0`\n(pre-v0.3.29 behaviour) still catches the entailment, and EITHER gate alone is\nenough to lose it, so it is \n[…]\nlment, is corpus-inert, and costs nothing on the two DKey\nvolume discriminators.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "fix(convert): see NNF-only `∀role.DKey` in the DKey role gates (RUSTD…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T05:47:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3dd9032435f0060d6669cf614f792e1d732f64ff",
          "body": "…NCY, default OFF)\n\n`rustdl classify --json ontologies/real/family.ofn` reported\n`\"consistent\": true, \"incomplete\": false, \"unsatisfiable\": []` while\n`rustdl consistent` on the same file reported `inconsistent`. Two wrong\nanswers from one binary: family.ofn IS inconsistent (HermiT, Konclude and\nrust\n[…]\neasured dead-end.\n`#[ignore]`d test `ddmin_core_residual_divergence` records it.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "fix(classify): KB inconsistency pre-check (RUSTDL_CLASSIFY_INCONSISTE…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T05:39:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bc55705644f85feda8a2aabe6409fea82ef1bd41",
          "body": "…em (RUSTDL_EL_BOT_FILLER, default OFF)\n\nD10-class correctness fix — a fragment gate certified a closure COMPLETE while\nthe engine silently DROPPED the axiom, so rustdl returned a wrong answer AND\nreported `incomplete: false`.\n\nGATE: `is_el_concept` (owl-dl-reasoner/src/classify.rs) has a `Bot` arm \n[…]\ne is\ninert on all measured corpora and closes a certified-complete wrong answer.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "fix(saturation): lower `⊥` existential fillers instead of dropping th…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T05:20:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "488a39ba64d2327a4e06f2ef62635cf9a076682e",
          "body": null,
          "is_bot": true,
          "headline": "chore(protege): update.properties -> 0.4.7 [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-08-01T04:45:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0eb2fcabfe6a4afbf46733a93610db79fd415fb9",
          "body": "FP=0 soundness net 11/11 VERIFIED, closures EXACT against the committed oracle\n(galen 27997, notgalen 32739, sio 8904, ore-10908 6001, wine 653, pizza 499, alehif 247,\nro 158, ore-15672 142, sulo 51, bibtex 16). Workspace tests 1373 passed / 0 failed;\nfmt and clippy -D warnings clean. The 3 NOT VERI\n[…]\nrified pre-existing and unrelated: `cargo test -p owl-dl-py` fails to LINK on\nPython symbols. Confirmed by stashing these edits and reproducing it unchanged, rather\nthan assuming it could not be mine.",
          "is_bot": false,
          "headline": "release: v0.4.7 -- promote the two peer-triage levers to default ON",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T04:40:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "07220031cc195734261f11cd213a28965dba8131",
          "body": "…ault OFF)\n\nis_el_axiom / is_saturator_axiom fell through to `_ => false` for bare SymmetricObjectProperty\nand InverseObjectProperties DECLARATIONS, so merely NAMING such a property refused the\nontology the saturation fast path. Admits a declaration only when the role's edge set is\nprovably UNREAD (\n[…]\not below an observable role -- closed to a fixpoint).\n\n44 of the 257 now classify (median 1.87 s). The blocked set is 76; the other 32 have a\ngenuinely READ role and admitting them would be a D10 bug.",
          "is_bot": false,
          "headline": "merge: bare-declaration fragment gate (RUSTDL_FRAGMENT_BARE_DECL, def…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T04:27:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f8fd7f7b60b514d2552790615b319bfe2056986",
          "body": "…ration\n\nRUSTDL_FAST_DIRECT_SUBSUMERS -- direct_subsumers recomputed an O(k^2) transitive reduction\nPER CLASS inside the OUTPUT loop. ore_ont_10125 finished classifying in ~15 s and then spent\n>=385 s emitting: DNF@900 s -> 14.70 s complete (>61x). Byte-identical output including\nordering (an orderi\n[…]\nsured 0.02-0.14 s (0.2-0.3%),\nRSS flat, because every large ABox-free ontology takes the pure-EL fast path and never\nreaches that call site. Do not quote the '~62% of prep' estimate. Kept default OFF.",
          "is_bot": false,
          "headline": "merge: O(k^2) Hasse reduction out of the output loop + lazy ABox satu…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T04:27:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3baebb232c1fea01af35e238b9288b61603aa31b",
          "body": "Records a derived subsumer pair at ENQUEUE rather than at POP, so a deep worklist backlog\nhas an in-queue membership test. On ore_ont_11085 the queue reached 1.07 G entries (8 GB)\nwith >=414 M of 927 M pushes provably duplicates of already-queued pairs.\n\nEffect: OOM-abort at 16.96 GB -> completes at 491 MB (35x RSS). Kept DEFAULT OFF because it\ndoes NOT recover the ontology at a production budget -- 687 s, still a DNF at 120 s. It\nremoves the memory wall, not the compute cost.",
          "is_bot": false,
          "headline": "merge: saturator enqueue-dedup (RUSTDL_SAT_ENQUEUE_DEDUP, default OFF)",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T04:27:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fe8d7cadb415a9115fb26145155ccf5e50d3d8e",
          "body": "Seeded 20-of-257 sample re-run strictly sequentially on an idle host, same binary\n(sha256 fd8ad6573505 verified identical to the sweep's): completed=0, dnf=19, err=1, where\nthe error is an OOM abort under a 24 GB cap this check imposes and the sweep did not -- a\nharsher test, and that ontology was DNF in the sweep too. 20 of 20 confirm.\n\nThis was the one open threat that could have moved the headline, and it is the confound that\nalready produced two retractions in this arc.",
          "is_bot": false,
          "headline": "docs: close the contention threat -- Set A=242 is measured, not bounded",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T04:03:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e9c124207d01239a9ed6ea86c1d2514c2b68bbf",
          "body": "…ses refuted\n\nTriage complete across all three peers. HermiT and KM each rescue ZERO of Konclude's 15, so\nthree independent reasoners fail exactly the same 15: Set A = 242 (94%), Set B = 15 (6%),\nmedian fastest-peer wall 3.47 s.\n\nSet C = 25 indicts KM specifically -- it is the sole outlier in nearly\n[…]\naration gate. The implementer re-measured the\n  denominator at 76 and admits 44 with a provably sound predicate; the other 32 have a\n  genuinely READ role and admitting them would have been a D10 bug.",
          "is_bot": false,
          "headline": "docs: final A/B/C partition (242/15/25) + four gated fixes, two premi…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T03:33:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e22f6546514df0a67cc64fe2935076a0dd52c429",
          "body": "… output loop (RUSTDL_FAST_DIRECT_SUBSUMERS, default OFF)\n\n`Classification::direct_subsumers` re-derived the transitive reduction from\nscratch on every call: O(k^2) `entails` probes for a class with k strict\nsupers, and -- because an unsatisfiable subject's row is ELIDED -- a full\nO(n^2) rescan for \n[…]\nbership unchanged): 2 FAIL -- ordering is\n  genuinely guarded, not incidentally.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "perf(reasoner): hoist the O(k^2)-per-class Hasse reduction out of the…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T03:11:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1ccdb25b09297a8838ef3b6fc9868ef9e0a56fdd",
          "body": "…(RUSTDL_LAZY_ABOX_SATURATION, default OFF)\n\n`PreparedOntology::from_internal` ran a full EL saturation whose ONLY consumer\nis the lazily-initialised `abox_verdict()` -> `abox_check::check`. `check`\nearly-returns `Unknown` before touching the closure whenever\n`abox.individuals` is empty, so on an AB\n[…]\ndentical_off_vs_on).\n* gate -> never elide: elides_closure_when_abox_free FAILS.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "perf(reasoner): elide the ABox-only EL saturation on ABox-free input …",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T03:10:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cf0d2635b901d8255e41a57939a21bc2b62a02a2",
          "body": "…to the fragment gates (RUSTDL_FRAGMENT_BARE_DECL, default OFF)\n\n`is_el_axiom` / `is_saturator_axiom` fell through to `_ => false` for\n`SymmetricRole` and `InverseObjectProperties`, so merely NAMING such a\nproperty refused the ontology the saturation fast path and dropped it onto\nthe O(n^2) hybrid l\n[…]\nair,\nwhich the flag deliberately admits, and it previously ran without the lock.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "feat(classify): admit provably-unread symmetric/inverse declarations …",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T01:27:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8377d2c6f9ffd2035d191ce0228f5c637553d980",
          "body": "…ON on the fragment gate\n\nThe largest single lever found in this sweep, and it is a dispatch bug, not an engine one.\nclassify.rs:1132+1312 fall through to `_ => false` for bare `SymmetricObjectProperty` and\n`InverseObjectProperties` DECLARATIONS, so an ontology that merely NAMES such a property is\nr\n[…]\nbuild) R3 reports CONFIRMED with\nbyte-identical closures and 209.6->119.9 s on ore_ont_1508; R4 reports SUSPECTED and flags its\nown measurement as confounded by seed-clause removal. Not resolved here.",
          "is_bot": false,
          "headline": "review(R4): orchestrator sweep -- 71 of 257 DNFs are a BARE DECLARATI…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T00:21:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "53d17915e5bbf8d7655a2e5fea1aa495f16a5c2c",
          "body": "…framing\n\nPeer triage of the real DNF population contradicts two claims this file makes.\n\n1. The tail is not intrinsic. Konclude classifies 242 of the 257 genuinely-unfinished\n   ontologies (94%) at the SAME 120 s single-thread cap, median 3.57 s. Set A >= 242,\n   Set B <= 15. The 'all levers measur\n[…]\ning does not hold on the named cases.\n\nStates the open caveat inline: the rustdl half is inherited from a 4-way concurrent re-run\nand still needs an uncontended re-measurement before the 242 is final.",
          "is_bot": false,
          "headline": "docs(CLAUDE): correct 'RSS not wall time' and the intrinsic-hardness …",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T00:10:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6bc8d90e1f090650e0e77f9bd5f669a571ebfb73",
          "body": "…ic hardness\n\nKonclude classifies 242 of rustdl's 257 genuine DNFs at the SAME 120 s cap, median 3.57 s,\n186 of 242 under 10 s, median closure 162k pairs. Since HermiT and KM can only move\nontologies from B to A, Set A >= 242 and Set B <= 15 already.\n\nThat contradicts the standing account in CLAUDE.\n[…]\n threats to validity listed, including the one that could still move\nthe headline: the rustdl half of the partition is inherited from a 4-way concurrent run and\nhas not yet been validated uncontended.",
          "is_bot": false,
          "headline": "docs: DNF-257 characterization -- 94% of the tail is gap, not intrins…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T00:06:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a77fb8f1d2f004b8512ecda56e9b0fba63aba0fd",
          "body": "… 1 big wall lever,\n\nand three standing beliefs overturned\n\nR3 OVERTURNS THE INCUMBENT NARRATIVE FOR THE HARD TAIL. The residual DNF cost has long been\nattributed to disjunctive branching in the wedge. Profiling says otherwise on both named\ndense-SROIQ cases: ore_ont_10019 is 84.6% MAIN TABLEAU (sea\n[…]\ne, so\n\"flag-OFF byte-identity\" does not establish behavioural equivalence for that channel.\nFlagged for follow-up, not yet root-caused.\n\nNothing here is implemented. Fixes go through the Phase 4 gate.",
          "is_bot": false,
          "headline": "review(R1,R3): convert/data_axioms and hyper.rs sweeps -- 2 D10 bugs,…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T00:02:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f38d2c13cda62d8aae836cd74b13998edbb1a1e8",
          "body": "…AT_ENQUEUE_DEDUP, default OFF)\n\nThe EL saturator's `todo_subsumer` worklist recorded a derived pair into\n`self.subsumers` only at POP time (`process_subsumer` opened with\n`if !self.record_subsumer(c, d) { return; }`).  `enqueue_subsumer` therefore\nfiltered against a set that did not yet contain any\n[…]\nep, only the curated\nbyte-identity above.  `RUSTDL_SAT_ENQUEUE_DEDUP=1` opts in.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "perf(saturation): record subsumer pairs at enqueue, not pop (RUSTDL_S…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-08-01T00:00:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "eff97590e2ddaa4e4497fd0bc33e2256ef70dde6",
          "body": "…st, not a matrix\n\nCloses the open Group A question from docs/2026-07-31-small-dnf-highmem-rootcause.md,\nwhere the cause was recorded as \"unidentified\" after both prior hypotheses were refuted.\n\nCAUSE: `todo_subsumer: VecDeque<(ClassId, ClassId)>` (owl-dl-saturation/src/lib.rs:373,\npushed at :958 an\n[…]\nfinding is MISS-direction only.\n\nNothing implemented yet -- these are findings. Fixes go through the Phase 4 gate\n(report-only, flag default OFF, sabotaged canaries, FP=0 net, flag-OFF byte-identity).",
          "is_bot": false,
          "headline": "review(R2): ore_ont_11085 root cause CONFIRMED -- the subsumer workli…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-31T22:58:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "509efc82682a343c4df913e93708e9d6f11a1e08",
          "body": "Comprehensive plan, 6 phases, parallelised and delegable. Turns \"257 of 1920 fail\" from\na count into a mechanism-partitioned, peer-triaged, code-attributed account.\n\nCORE STRATEGIC CHOICE: peer triage FIRST. The highest-value cut is not rustdl-internal,\nit is \"does Konclude/HermiT/KM classify this?\"\n[…]\nand no beyond-noise delta.\n\nHost discipline is explicit: KM's 20GB cap is mandatory (uncapped it hit 237GB on a\n100-class ontology and OOM-killed the host mid-sweep), and Phase 4 gates must run quiet.",
          "is_bot": false,
          "headline": "plan: characterize and profile the 257 genuine-DNF ORE ontologies",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-31T22:11:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bec26ea2de3ca6f5ae515bea9c516235a0b831ea",
          "body": "…es an estimate)\n\nFull 120s re-run of ALL 312 (not a 24-ont sample): 55 complete (18%), 257 still exceed\n120s, 0 errors. Corrected headline: rustdl fails to classify ~257 of 1920 (13.4%), not\n312 (16.2%). The 312 remains the right answer to 'how many miss a 30s budget' -- the\nproduction question -- \n[…]\n that held 237 GB for ~15\nmin mid-sweep can each only turn ok->dnf. Slowest completers cluster at the boundary\n(1422@119s, four more at 116s), so a larger cap adds a tail rather than moving the split.",
          "is_bot": false,
          "headline": "bench: resolve the DNF split -- 55 cap artifacts, 257 genuine (replac…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-31T22:09:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7ac88638e439694e7e2f00b6490f8c1596318e24",
          "body": "…means cap-exceeded\n\nTwo independent adversarial reviews (design lens, payoff lens) converged, and I verified\nthe central claim myself. The spec and plan are marked REJECTED and the mislabelling is\ncorrected in the two benchmark docs that had propagated it.\n\n1. THE PREMISE WAS FALSE. The three \"DNF\"\n[…]\ny don't DNF WITH it enabled, so\nthe rule passed while the design was aimed at inert axioms. A stopping rule must bind to\nan outcome (\"suppression changes >=1 answer\"), not to the absence of a failure.",
          "is_bot": false,
          "headline": "docs: RETRACT the data-cardinality spec+plan; \"DNF\" in the ORE sweep …",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-31T17:47:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a00bf783c1535ec935a33e92cf8a733300213701",
          "body": "For adversarial review before implementation. Group B (16632/11126/10425) DNFs because\nconversion materialises 4.2-6.6M DisjointClasses(DKey,DKey) axioms -- 99.87% of all\nconcept_rules -- and EVERY existing gate correctly declines to help, because 74\nDataMaxCardinality axioms make <=n a genuine COLL\n[…]\n the 11 preserved DKey fixtures and a full-pool\nON-vs-OFF answer-identity check via the harness. Addressable set is stated up front as 3\nontologies, and not building it is named an acceptable outcome.",
          "is_bot": false,
          "headline": "spec+plan: data-cardinality counting instead of O(k^2) DKey disjointness",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-31T17:31:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f6ac268a9a10a75ccf637030251791262867f5cc",
          "body": "…ree hypotheses refuted\n\nsystematic-debugging Phase 1-3 on the cluster the ORE sweep surfaced. No fix proposed:\nGroup B's cause is identified but the right fix is a design task, and Group A is open.\n\nTHE CLUSTER IS NOT ONE BUG. Component isolation (--saturation-only / tbox-stats / full):\n  11085  co\n[…]\n2 classes, saturator-resident, doubling to >=21.7GB, D4 and\nPhase 2a both refuted. Constraints for any candidate: the doubling steps, and 0\nfunctional / 0 forall / 1,354 exists / 9,486 ClassAssertion.",
          "is_bot": false,
          "headline": "docs: root-cause the small/DNF/high-RSS cluster -- two mechanisms, th…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-31T17:15:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f1eca2ccc45d8bc06dc7bb5281737ce944d9f95a",
          "body": "First run of the new owl-reasoner-harness. Raw JSONL lives in that repo\n(baselines/2026-07-31-ore-rustdl-v046-t1-c30.jsonl); this doc is the interpretation.\nProvenance: rustdl 0.4.6, sha256 fd8ad6573505, RAYON_NUM_THREADS=1, 30s cap,\n--forbid-marker verified clean before the run.\n\n1920 onts: ok 1607\n[…]\nlt for, and it\nstill allocates 5.9 GB from a 2 MB input.\n\nNext step recorded: 11085, and the first diagnostic that separates the two causes --\ndoes tbox-stats complete cheaply while classify balloons?",
          "is_bot": false,
          "headline": "bench: full ORE sweep on v0.4.6 -- DNF population is 312, not 12",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-31T16:35:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c735678a9d2869e6ad2529b5cb0c759723e1bec7",
          "body": "…ro candidates\n\nThe park record specified the resumption test as \"completes at least one ontology the\nshipped path DNFs\", over the in-fragment set 12012, 10016, 10032, 2397, 9318, 15703,\n6212, 3524. Re-measured on v0.4.6: ALL EIGHT complete on the shipped hybrid.\n\n  9318 0.89s | 2397 1.18s | 10032 2\n[…]\nd of thirteen); and four measured negatives\nnot to repeat.\n\nBurden to reopen: exhibit an ontology inside owl-dl-cb's fragment that the shipped\nhybrid does not solve. None is known in ORE as of v0.4.6.",
          "is_bot": false,
          "headline": "docs(cb): CLOSE the CB arc on evidence -- its GO criterion now has ze…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-31T06:33:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5fa4eafc40e7bfc10c114fdf12cb240453f9f66d",
          "body": "…sion of it\n\nThe handoff omitted the CB (consequence-based, KM/Sequoia) engine arc ENTIRELY -- 0\nmentions -- despite that arc being what this session was opened to work on. It was\nparked by an explicit redirect and everything else in the handoff happened after\nthat redirect, so a reader would conclu\n[…]\n.\n\nRecords the hazard explicitly: that path is a single gitignored file every SDD run\noverwrites. Check whether it holds another arc's ledger before starting one, and copy\nanything durable into docs/.",
          "is_bot": false,
          "headline": "docs: restore the CB arc's progress ledger and fix the handoff's omis…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-31T06:12:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a4ae7adbf8fcd46c40beb1fd3ad442d899eea981",
          "body": null,
          "is_bot": true,
          "headline": "chore(protege): update.properties -> 0.4.6 [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-31T05:56:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12869a866a5a65a0b1e3c3dbd9fe4dd5c7169e7a",
          "body": "Four ORE ontologies go from did-not-finish to classifying (9347, 11287, 7607,\n1685), and five axiom shapes the EL saturator silently dropped are now handled.\n\nRELEASE-CANDIDATE VERIFICATION on f83bc38 (the tree being tagged):\n  - FP=0 soundness net 22 passed / 0 failed, every closure exact (galen 27\n[…]\n, the\ntwo new diagnostics, the fast-path abox_check win, and -- under Notes -- that the\nBucket A/B characterisation of the DNF tail is falsified, with three candidate\ncauses eliminated by measurement.",
          "is_bot": false,
          "headline": "release: 0.4.6 -- completeness + conversion-scale",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-31T05:47:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f83bc38be49df09e916d88a0231cb3d6d752e3d5",
          "body": "…rement failures\n\nDeliberately NOT a feature list (CLAUDE.md and the commit messages carry those). It\ncovers the three things a fresh session would otherwise get wrong.\n\n1. THE DNF TAIL IS 12 AND THE A/B TAXONOMY IS FALSIFIED. It was an artefact of which\n   budget each phase honours, not two mechani\n[…]\ned against the repo before committing (11 fixtures + driver,\nRUSTDL_DKEY_SPLIT_STATS present, known-miss and nominal regression tests present,\nall three branches backed up under refs/archive/heads/*).",
          "is_bot": false,
          "headline": "docs: handoff 2026-07-31 -- DNF-tail state, dead leads, and the measu…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-31T05:26:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "17e134bfb92ccf17ce15f995d032aca770cf54ac",
          "body": "…withdrawals\n\nMeasured the per-class clause clone in HyperCache::classify_labels with a verified\ninstrument (checked `strings <binary> | grep` BEFORE trusting any output). 60s window,\n32 cores:\n  5548  4,650 clones  120,762ms  252,249 clauses  6.29%  25.97 ms/clone\n  5438  9,700 clones   25,251ms   \n[…]\nnique to the\ntarget fn (verify the count), and confirm the marker is in the BUILT BINARY before\ninterpreting anything. Silence from an absent instrument looks exactly like silence\nfrom a slow program.",
          "is_bot": false,
          "headline": "docs: clause-clone lead REFUTED by measurement (0.55-6.3%), plus two …",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-31T05:15:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "85ddf0ec687369cc4c1004477272fdb715f5d8e3",
          "body": "…use clone is the lead\n\nMy headline hypothesis was wrong and its own prototype disproved it. Recording both,\nbecause the refutation is as useful as the lead.\n\nREFUTED: \"the deadline is not enforced inside horn_fixpoint\". The structure is real\n(solve checks the clock once on entry, then runs an unint\n[…]\nuplicates a fixed cost. NOT established:\nthat it dominates. Next: apply the v0.3.39 routing to classify_labels and measure --\ncheap (machinery exists) and verdict-safe (same clauses, different route).",
          "is_bot": false,
          "headline": "docs: label-cache stall -- deadline hypothesis REFUTED, per-class cla…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T22:45:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "33b8bc75baec90e36c1b06b3d7ecf6610e1249a9",
          "body": "…A/B taxonomy\n\nRe-measured the 5 \"Bucket B\" ontologies on current main. The 2026-06-22 taxonomy\n(Bucket A per-pair-bound / Bucket B label-cache-build-bound, \"cost OUTSIDE the\nper-pair loop\") does not hold, and it drove five weeks of work plus a standing\nrecommendation to prefer Bucket B as the bette\n[…]\ne the RSS phase probes); and two of my own errors -- piping probe\noutput through `tail` loses everything when the outer timeout kills the loop, and a\n4x120s loop under a 10-min cap truncated silently.",
          "is_bot": false,
          "headline": "docs: the DNF tail is ONE mechanism, not two buckets -- corrects the …",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T21:37:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c010acb66bc90b57ed41971b7b6e118a555c0fa",
          "body": "…ogies recovered\n\nRUSTDL_DKEY_COLLAPSE_SPLIT now defaults ON (=0 reverts, verified: 7607 reads 9,515 by\ndefault and 5,419,609 with =0).\n\nRECOVERED FROM DNF (single-thread, 300s cap):\n  ore_ont_7607  concept_rules 5,419,609 -> 9,515; DNF@300s/7.87GB -> 6.81s/264MB, 265 subs\n  ore_ont_1685  concept_ru\n[…]\naid benefit, 245 drop under 10k pairs\nand see nothing observable. The value is concentrated in the tail -- 2 DNF recoveries,\n3 large speedups, 9.53% fewer materialised disjointness axioms corpus-wide.",
          "is_bot": false,
          "headline": "feat(convert): default the collapse/broadcast split ON -- 2 DNF ontol…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T20:22:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d76252804c9267eee7dbb71360c64bfadbeee63b",
          "body": "RUSTDL_DKEY_COLLAPSE_SPLIT=1 omits a DKey-disjointness pair when its component has no\nCOLLAPSE role and BOTH keys are value-only there. The classification was already\ncomputed and validated in report-only mode (01e9925); this only lets it act.\n\nVerified the flag switches on the discriminating cases:\n[…]\nass with the flag ON,\nand are non-vacuous (sabotaging the condition fails them).\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "feat(convert): act on the collapse/broadcast split, default OFF",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T19:09:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5be2ce5810ed9964f90bf3a19b7b8d506a1a19b3",
          "body": "They existed as .ofn files with a README of measured verdicts but nothing ran them.\nEach pins a CONSUMABLE clash that the collapse/broadcast split must not lose,\nincluding the D11b flagship, plus a negative control that must stay satisfiable and a\npinned pre-existing miss. All 11 pass on unmodified main.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "test(dkey): execute the 11 preserved collapse/broadcast fixtures",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T19:00:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d8c287e1dd1e0591f7c43966c2e0a25b8e45d8ba",
          "body": "Short by design: the risky part -- the COLLAPSE/BROADCAST classification -- is already\nimplemented and validated on main in report-only mode (01e9925). This plan makes the\nalready-computed decision ACT instead of only counting.\n\nTask 1 wires the 11 preserved adversarial-review fixtures into an execu\n[…]\nbinaries immediately after\ntheir build; and any population claim must state its timeout AND exclusions, because a\nper-item timeout selects against the largest items and already invalidated one figure.",
          "is_bot": false,
          "headline": "plan: DKey collapse-vs-broadcast split (3 tasks)",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T18:10:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "01e992542307083fc19b516449ab1c9000a436d9",
          "body": "…e collapse/broadcast split\n\nAdds RUSTDL_DKEY_SPLIT_STATS=1, which makes conversion count how many DKey-disjointness\npairs the proposed collapse/broadcast split WOULD drop, and prints\ndkey_pairs_total / dkey_pairs_would_drop from tbox-stats. Report-only: emission is\nunchanged, verified byte-identica\n[…]\nThe other 9 search-bound DNFs measure total=0, a useful negative: they\nare not data-driven, so no DKey work can help them.\n\nSpec: docs/superpowers/specs/2026-07-30-dkey-collapse-vs-broadcast-design.md",
          "is_bot": false,
          "headline": "Merge measure/dkey-collapse-broadcast-stats: report-only stats for th…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T18:08:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "14b4d105d2a222663a715f4d5a4615b07a56297c",
          "body": "… true figure 9.53%\n\nThe second pass over the 17 first-pass timeouts overturned a headline I had just\nreported. The two largest DKey populations in the whole corpus are almost entirely\nNON-droppable:\n  ore_ont_2504  68,672,720 pairs -> 98 dropped (0.0001%)\n  ore_ont_4141  42,723,215 pairs -> 6\nBoth \n[…]\nntology counts and the DNF cross-reference (4 of 14, incl. Bucket B's 5548), not\non the corpus share. 5 ontologies (10860 10929 15635 4572 8445) exceed 300s and remain\nunmeasured -- 0.26% of the pool.",
          "is_bot": false,
          "headline": "docs: RETRACT the 28.1% corpus-share -- a timeout selection artifact;…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T18:03:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7d0d293db48673c1c003cdedc2d4101647dca012",
          "body": "…REVERSED\n\nMy \"addressable set is 3 ontologies\" was wrong by ~95x. It selected on residual >=1M\nconcept_rules -- a THRESHOLD, not the binding predicate. An ontology dropping 200k\npairs benefits identically and could never appear in such a list. This is the same\npresent-vs-binding substitution this r\n[…]\nill the hard part, but the\npayoff is an order of magnitude larger than when they were judged not worth paying.\nThe two alternatives are also no longer exclusive: this lever is partly a Bucket B\nprobe.",
          "is_bot": false,
          "headline": "docs: measured population is 284 ontologies, not 3 -- recommendation …",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T17:40:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1f915f0f5a3dc75d6b6df725038029ae7388148",
          "body": "RUSTDL_DKEY_SPLIT_STATS=1 makes conversion count how many DKey-disjointness pairs the\nproposed collapse/broadcast split WOULD drop, and `tbox-stats` prints\ndkey_pairs_total / dkey_pairs_would_drop. NOTHING about emission changes -- verified\nbyte-identical concept_rules with stats on vs off (9347 113\n[…]\nFunctionalDataProperty = collapse)\nand all 11 adversarial-review fixtures report would_drop=0, i.e. the split would lose\nNO consumable pair on any shape built to break it, including the D11b flagship.",
          "is_bot": false,
          "headline": "measure(convert): report-only stats for the collapse/broadcast split",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T17:00:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c155f4d5c503271e1f1f2316909d89ef8184e76e",
          "body": "…ixtures preserved\n\nSPEC for the third instance of this bug class: the shipped merging gate treats all\nmerge sources alike, but COLLAPSE (functional / inverse-functional / <=n) forces two\nDISTINCT successors onto ONE node, whereas BROADCAST (a DKey-bearing range or forall)\nputs ONE key onto EVERY su\n[…]\nif those 3 matter for a real\nworkload; Bucket B of the DNF tail (5 onts, 0/5 recovered in five weeks, blocker not\nyet diagnosed) is the better target for DNF progress per unit risk. Flag defaults OFF.",
          "is_bot": false,
          "headline": "spec: DKey collapse-vs-broadcast split, with the adversarial-review f…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T15:47:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ef41128b889bb5b7ee1ed9bad9ae2a19f63354fe",
          "body": "FIXES A COMPLETENESS REGRESSION I SHIPPED EARLIER TODAY (3669925). Found by two\nindependent adversarial reviewers, which converged on the same counterexample.\n\nThe merging gate marked a role merge-inducing on ObjectPropertyRange / forall ONLY\nwhen the filler mentioned a DKey (filler_mentions_dkey). \n[…]\nhich\nrustdl accepts because Vocabulary interns object and data properties into one role\nspace -- kept because accepting an input and then silently missing its inconsistency\nis worse than rejecting it.",
          "is_bot": false,
          "headline": "fix(convert): a nominal-forcing range is a DKey-merge source too",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T15:32:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2a4f8df854c9c8f8842f0bf7876611878e198d04",
          "body": "…ARKED\n\nRe-scan on the verified binary (both sides pinned), replacing the retracted figure:\n  scanned 1913 | >=1M before 41 | REDUCED 325 (17%) | still >=1M after 3\n  recovered from conversion timeout 2 (9347 -> 113, 11287 -> 199,841)\n\nINTERNAL VALIDITY CHECK PASSED: ore_ont_5368 is ABSENT from the \n[…]\nnds in the residual class, or one of the four is\nindependently needed (5368, a 27 GB DNF, is the strongest candidate). Explicitly: do\nNOT build it on the strength of \"the gate did not fix everything\".",
          "is_bot": false,
          "headline": "docs: validated population -- 325/1913 reduced, 3 residual; Lever 2 P…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T14:14:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "92a17a41f1a97a269c28a0542e4598948a3eb318",
          "body": "…surement trap\n\nNew entry under owl-dl-datatypes: the mechanism (bounded seeding gates the UNION on\nm_star but step (e) anchored into every role's component regardless, so k values on\none data property were seeded all-pairs), the fix (skip non-m_star components, reusing\nthe existing \"can never reach\n[…]\nive test fails under GATE=0).\n\nCorrects the stale line at 534: 9347's \"42 GB still at conversion\" is now fixed, and\nthat figure measured from_internal alone -- its true full-classify peak was 70.7 GB.",
          "is_bot": false,
          "headline": "docs(CLAUDE.md): record the DKey non-merging-component gate + its mea…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T13:22:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3669925395b5706005b9db562e7a658cd03ad9c9",
          "body": "… non-merging components\n\nconvert_ontology materialised DisjointClasses(DKey_a, DKey_b) for O(k^2) pairs of data\nvalues even when NO axiom in the ontology can ever put two DKeys in one node label.\nore_ont_9347: 49,571,087 axioms, and classify was a DNF at 703 s using 70.7 GB.\n\nMECHANISM. DataPropert\n[…]\n a 27 GB DNF only it can address. Its four required\nconsumer hooks are enumerated in the spec, along with the finding that no consumer\niterates the full pair set, so it stays architecturally feasible.",
          "is_bot": false,
          "headline": "Merge perf/dkey-nonmerging-component-gate: skip DKey disjointness for…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T13:18:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0f1b199a7f4931f0ab3122502e257ff8dc24d0f5",
          "body": "…flat as designed\n\nAll from binaries verified against the discriminating check (9347 alone cannot tell\nthe gate from a zero-pairs build; 5368 is the discriminator).\n\nCORRECTNESS: flag switches (113 ON vs 49,571,087 OFF); 3 reasoning canaries pass\n(66/66); the two new boundary tests give 0 and 3 pair\n[…]\nB DNF that only Lever 2\ncan address.\n\nPOPULATION: deliberately left PENDING. The first scan was retracted (sabotaged\nafter-binary) and the re-scan is still running; no figure is quoted until it lands.",
          "is_bot": false,
          "headline": "docs: measured results -- 9347 DNF@703s/70.7GB -> 10.72s/227MB, 5368 …",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T13:16:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "46be74817ef992e3e2d59f9fb4c7b164028af242",
          "body": "…age build\n\nA scan reporting \"443 of 1893 reduced, 0 residual >=1M\" is INVALID. Its after-side\nwas the canary-sabotage build (anchor gate forced to skip EVERY component => zero\nDKey pairs), not the gate.\n\nCause: to prove the canaries non-vacuous I forced `if true { return; }`, rebuilt,\nobserved the \n[…]\ny the pin against a discriminating case. Same root cause as the earlier failure\nthis session (rebuilding target/release while a scan read it) -- both from reusing\ntarget/release across configurations.",
          "is_bot": false,
          "headline": "docs: RETRACT the population scan -- its \"after\" binary was the sabot…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T13:08:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "69c2762dcc998ffe866e03e79fcfa90aa5df5e53",
          "body": "…ional\n\nThe merging gate made this pre-existing test fail (expected 2 pairs, got 0). I\nadjudicated it as the TEST being wrong, not the gate:\n\nIts fixture had dp1={1,2} and dp2={3,4} on one individual and NO\nFunctionalDataProperty. It asserted the two SAME-ROLE pairs are seeded. But\n`exists dp1.DKey(\n[…]\nointness (expects 0).\n\nPROCESS NOTE: both implementers ran only FILTERED owl-dl-core tests plus the\nreasoner canaries, so neither saw this. `cargo test -p owl-dl-core --lib` now: 248\npassed, 0 failed.",
          "is_bot": false,
          "headline": "test(convert): make bounded_dkey_disjoint_skips_unrelated_roles funct…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T12:42:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8ba71d4a99e7e9888f10d235d632f45ebf4c43b0",
          "body": "Two fixtures differing in EXACTLY one axiom (FunctionalDataProperty(:p)),\nisolating the gate: 3 integer values on a non-merge-inducing data property\nseed 0 DKey disjointness pairs; adding FunctionalDataProperty(:p) makes p\nmerge-inducing and all 3 pairs survive (C(3,2) = 3).\n\nNon-vacuity verified: t\n[…]\nive test FAILS under RUSTDL_DKEY_MERGING_GATE=0\n(exit code 101; 3 pairs seeded).\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "test(convert): pin the DKey merging-gate boundary at conversion level",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T12:24:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e1506aff43fb942e11a8afe7685a46dd677cdcc8",
          "body": "…nents\n\nRUSTDL_DKEY_MERGING_GATE, default ON. A role component with no merge-inducing role\ncan never force two DKeys into one node label, so its pairwise disjointness is\nunusable; skip anchoring into it and let the existing 'can never reach a node label'\nskip drop the keys. =0 restores the pre-2026-\n[…]\nfied the flag switches: ore_ont_9347 concept_rules 113 (ON) vs 49,571,087 (OFF).\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "feat(convert): gate DKey disjointness seeding on merge-inducing compo…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T12:18:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "95d538b5d4bc5f15b6aa57d096a6568f761f81b9",
          "body": "Task 1 flags the already-prototyped gate (RUSTDL_DKEY_MERGING_GATE default ON) and\nverifies the flag switches (9347: 113 ON vs 49,571,087 OFF). Task 2 adds two\nconversion-level boundary tests differing in EXACTLY one axiom\n(FunctionalDataProperty) so they isolate the gate, plus an explicit non-vacui\n[…]\ns into the plan: check real exit codes (not\ntail's), and never rebuild a binary while measuring against it (that invalidated one\nscan today), so recovery is measured from pinned before/after binaries.",
          "is_bot": false,
          "headline": "plan: DKey non-merging component gate (3 tasks)",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T12:13:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f8b4920bbad8cb6214b8362f4df39b94f7416ce0",
          "body": "Measured redirect from the approved design. The chosen approach was an on-demand\ndisjointness oracle; diagnosis found a far cheaper fix for the dominant case and\nscoped the oracle down to a residual.\n\nDEFECT: bounded seeding (v0.3.29) gates the UNION of role components on\nmerge-inducing roles (m_sta\n[…]\n shows inertness and the canaries are the real gate.\nLever 2 (oracle) deferred with its 4 required hooks enumerated, plus the finding\nthat no consumer iterates the full pair set, so it stays feasible.",
          "is_bot": false,
          "headline": "spec: skip DKey disjointness for non-merging role components",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T12:11:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3aae0339651e8d25ce3605e9aee8b5ee2d4d7a31",
          "body": "PROTOTYPE, not final: no env flag yet, no spec, no new tests.\n\nseed_disjoint_bucket's bounded seeding (v0.3.29) gates the UNION of role\ncomponents on merge-inducing supers (m_star), but step (e) anchors a DKey to\nuf.find(role) for EVERY Some/All/Min/Max occurrence regardless of whether any role\nin t\n[…]\nn_range_clashes passes even with zero pairs, so it\nclashes via another mechanism -- 3 canaries guard this, not 4.)\n\nTODO before merge: env flag, spec, plan, dedicated tests, FP=0 net, population scan.",
          "is_bot": false,
          "headline": "WIP(convert): skip DKey disjointness for non-merging role components",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T12:01:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ffafc2e05654f3608fa729b2fb373b01896a9aef",
          "body": "…s unbounded\" claim\n\nNew entry for the shipped fast-path change (no flag, verdict-identical by\nconstruction): what was wasted, the measured 16.7-35.5% recovery with flat hybrid\ncontrols, the 76-94%-of-ceiling framing (never quote RUSTDL_ABOX_CHECK=0 as the\nvalue), the population counted on the BINDI\n[…]\nty run on this 32-core host. So it is slow\n(~300s), not non-terminating, consistent with \"wall ~linear in the budget\"\nextrapolated to no cap. Marked host-dependent; the freshness-canary advice stands.",
          "is_bot": false,
          "headline": "docs(CLAUDE.md): record reduced-input abox_check; amend the wine \"DNF…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T11:34:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bf553fdac3799dcd9fae70fffe7b5390768cd7b5",
          "body": "…classify fast paths\n\nBoth classify fast paths built a full PreparedOntology (a second full EL saturation +\nHyperCache::build + ConsistencyCache::build + NNF + absorb) solely to read one\nABox-inconsistency verdict, then discarded it. They now build only the eight fields\nabox_check::check actually re\n[…]\nbotage when extending abox_check.\n\nNot a memory lever: 4 of 6 winners show ~0% RSS change, so the saving is skipped\ncompute. ore_ont_9347's 42 GB remains in DKey disjointness at conversion, untouched.",
          "is_bot": false,
          "headline": "Merge perf/abox-check-reduced-input: reduced-input abox_check on the …",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T11:32:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d607b5a37c6b6d55f6274749367beadc7f91d11f",
          "body": "…ied by sabotage\n\nThe final review's top finding was that build_abox_check_inputs is a hand-copied\nprefix of from_internal, not shared code, so a future edit can silently\ndesynchronise the fast path from the hybrid path. A differential test was added\n(6 shapes, P2/P3/P4/P5 + 2 negative controls) and\n[…]\ntion -- is deliberately not taken:\nthe 8 values are not a contiguous prefix (dkey/hyper/consistency are interleaved),\nso unifying is a restructure of from_internal, more risk than this branch carries.",
          "is_bot": false,
          "headline": "docs: the differential test does NOT close the drift finding -- verif…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T11:29:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e0b238dad2da98c5a5e92e6c9145da22a9abc3c1",
          "body": "…nts/docs\n\nFindings from final code review of perf/abox-check-reduced-input:\n\nF1 (Important): Add abox_check_differential_tests unit-test module in\nlib.rs — 6 tests that run BOTH build_abox_check_inputs (fast path) and\nPreparedOntology::from_internal (full path) over the same fixture and\nassert the \n[…]\nates the pool, so the pool is\nnot fully frozen until after collect_abox returns.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "test(abox-check): differential tests + site-1 canary; fix stale comme…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T11:25:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "25902189009e5735e0cfcf269d3c33f92b21b431",
          "body": "…ABox onts\n\nCORRECTNESS\n- Gate 1 verdict identity: 3 canaries green, proven NON-VACUOUS (ABOX_CHECK=0 drops\n  the clash canary 3->0). Suite green, fmt+clippy clean.\n- Gate 2 FP=0 net: 22 passed / 0 failed. Every closure exact (galen 27997, notgalen\n  32739, sio 8904, ore-10908 6001, wine 653, pizza \n[…]\naving is predominantly SKIPPED COMPUTE (second EL saturation + HyperCache\n   build); RSS drops only where the discarded structures determined peak (1043,\n   11110). Do not cite this as a memory lever.",
          "is_bot": false,
          "headline": "docs: measured results -- all 5 gates pass, 17-36% wall on fast-path …",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T11:10:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "03adc0b97207555e9e5bd6a72759ec83d21f0f30",
          "body": "…ivalence argument\n\nCALL-SITE CORRECTION. Both spec and plan said \"the fast-path call site\" singular.\nThere are TWO structurally identical fast-path blocks, each ending in\n`return Ok(classify_pure_el(...))` and each wasting the same discarded\nPreparedOntology build:\n  - classify_internal_with_timeou\n[…]\ninfallibility loses nothing: from_internal's only fallible construct is\n    collect_chain_axioms(&internal)?, which returns Ok unconditionally (N>2 chains\n    are dropped via continue, never errored).",
          "is_bot": false,
          "headline": "docs: correct the call-site count (TWO fast paths) and record the equ…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T10:59:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1af1dd8bc981437c05d2fa2efcaa27f6bb18c369",
          "body": "The fast path built a full PreparedOntology (HyperCache + NNF + absorb +\nConsistencyCache) solely to read abox_verdict(), then discarded it — it either\nreturns classify_inconsistent or falls through to classify_pure_el, neither of\nwhich uses the object. Now builds only the eight values abox_check re\n[…]\nct anyway and abox_verdict() is lazy,\nso there was never anything to save there.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "perf(classify): build only abox_check's inputs on the fast path",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T10:52:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d8726d1f6b6986b0cdbdde4c35f723378a7233c3",
          "body": "Pure refactor, no behaviour change. Makes abox_check's dependency set\ncompiler-checked: it reads exactly eight fields and never hyper or tbox, which is\nwhat lets the classify fast path skip building those. Verified by the unchanged\nreasoner suite.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "refactor(abox-check): take AboxCheckInputs instead of &PreparedOntology",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T10:22:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5d8df0f485cf1ce00273d1c9bc653c76a48432f9",
          "body": "… target\n\nReview fixes on top of 454778d:\n- `>= 3` -> `== 3`. The fixture has exactly 3 named classes, so the equality pins\n  BOTH directions: the verdict silently stopping (under-report) and a phantom\n  unsatisfiable class (over-report). `>=` only caught the first.\n- Document the routing trap: `rus\n[…]\nreasoner --all-targets` exited 101 with 3 errors\nthere. The implementer reported clippy clean, but not with --all-targets, and the\ntask review did not check clippy. CI would have caught it after push.",
          "is_bot": false,
          "headline": "test(abox-check): tighten the clash canary and fix clippy on the test…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T10:12:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "454778dd4b9cdc3fe6b5efc4b0347e42bb68caf0",
          "body": "…ut change\n\nThree canaries that must hold before AND after: a P2-shaped ABox clash on a\nfast-path ontology marks every class unsatisfiable; a consistent ABox marks\nnothing; an ABox-free ontology is inert. They pin the verdict from the outside,\nvia the classification it drives.",
          "is_bot": false,
          "headline": "test(abox-check): fast-path verdict invariants before the reduced-inp…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T09:59:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9221f6af92700b80f22a9b160d2f428c5f0bdeec",
          "body": "Counted directly over 120 sampled completing ORE ontologies rather than using the\nassertion-count proxy: 68 take the fast path, 25 are fast-path AND ABox-bearing, 8\nare fast-path AND >=50k assertions. So ~21% of completing ontologies see some\nsaving and ~6.7% see the measured 20-40% band -- roughly \n[…]\ne of 192.\n\nSmaller, but it selects on the predictor shown to be BINDING (the classify path)\ninstead of one merely PRESENT (assertion count) -- the substitution this repo has\nmade six times this month.",
          "is_bot": false,
          "headline": "docs: measured addressable population on the correct predictor",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T09:52:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d20fd6716bcdbbdc48e104b03218351eeaad2fef",
          "body": "…d), plus its plan\n\nSPEC CORRECTION. The first draft claimed both classify entry points waste a full\nPreparedOntology build. Wrong. abox_verdict() is a LAZILY-INITIALISED field\n(lib.rs:4692, get_or_init), so:\n  - fast path (classify.rs:785-787): builds a full PreparedOntology solely for the\n    verd\n[…]\ne only FP=0 evidence this gets,\nsince CI's job is a stub), byte-identity on five ABox fixtures plus\nrealize/consistent, per-ontology recovery, and confirmation the two hybrid\nontologies are untouched.",
          "is_bot": false,
          "headline": "spec+plan: reduced-input abox_check is FAST-PATH ONLY (mechanism foun…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T09:50:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "261723094bafd0bfb919d9803fc3f3c0163e81ae",
          "body": "The spec listed the 50k-180k band as untested and warned against quoting a\npopulation from it. Ran it: 4 of 6 save 20-31% (1043 31%, 1115 23%, 10965 22%,\n11110 20%); 10127 and 10838 are flat.\n\nCombined over 14 sampled ontologies:\n  >=180k assertions   3/3 won (40%, 38%, 20%)\n  50k-180k            4/\n[…]\ns a 0.6 s prepare ~3%; 10838's TBox\nis small enough that HyperCache+absorb are cheap. Expect the saving where a large\nABox coincides with a non-trivial TBox; do not promise it per-ontology unmeasured.",
          "is_bot": false,
          "headline": "spec: run gate 6 — the 50k-180k band pays, population is ~192 not ~84",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T09:35:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c86848701d7de776e4f68641fc6cd65f5873472a",
          "body": "…y for one verdict\n\nReplaces the retired TBox-only-prepare lever, and is better evidenced.\n\nBoth classify entry points build a FULL PreparedOntology (EL saturation, told tables,\nHyperCache::build, NNF+absorb) solely to read abox_verdict(), then proceed. But\nabox_check reads exactly eight fields — ab\n[…]\ntes died this way this month; gate 6 tests the 50k-180k band\nbefore the population is quoted.\n\nExplicitly NOT a completeness lever: every ontology measured already completes, and\n11311 DNFs both ways.",
          "is_bot": false,
          "headline": "spec: reduced-input abox_check — stop building a full PreparedOntolog…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T07:39:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cece928429f425a891a4261362c6810876797501",
          "body": "… and record the redirect\n\nTwo advisors contradicted each other on the central fact; adjudicated by measurement,\nand the spec is dead.\n\nRemoving exactly what is_abox_axiom matches (ClassAssertion, ObjectPropertyAssertion,\nNegativeObjectPropertyAssertion, SameIndividual, DifferentIndividuals) — 36,28\n[…]\nurated corpus cannot gate any of this: exactly ONE fixture\n(alehif-test) is ABox-bearing and nominal-free, and it measures ~0. Future levers here\nneed an ORE on-vs-off sweep, not corpus byte-identity.",
          "is_bot": false,
          "headline": "spec: RETIRE the TBox-only prepare design — payoff measured at zero —…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T07:01:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8a6574e30afde7c9bdf93bfc4c0492c92510146a",
          "body": "…he build side)\n\nPreparedOntology::from_internal allocates +42.3 GB on an 8.6 MB / 114-class ontology\n(ore_ont_9347): ~17.9 GB HyperCache::build + ~24.5 GB absorb, concept_rules =\n49,571,087. Stripping the provably-irrelevant ABox gives 0.01 GB (4600x) and the\nclassification completes instead of bei\n[…]\navoided waste rather than DNF recovery.\n\nLands default-OFF with an explicit flip criterion; notes that CI does not run the\nFP=0 net, so a local run is the only soundness evidence this change will get.",
          "is_bot": false,
          "headline": "spec: TBox-only PreparedOntology construction (Lever A, extended to t…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T06:25:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f34ac4a823220417e66cfe2ac0899e4127b35b7a",
          "body": "…g selector\n\nScreened the memory-bound DNF onts by tbox-stats' concept_rules, which separates the\ntwo known points 346x (9347 49.6M @ 46 GB vs 10125 143k @ 1.7 GB) where ABox size did\nnot. Result: 9347 is a CLASS, not a singleton.\n\nAddressable by the from_internal fix (ABox-bearing, nominal-free, 11\n[…]\nost is elsewhere in that function\n(HyperCache::build is the candidate, given resid_or 1341). The fix will not help it.\n\nPool caveat: 11270 and 10621 are byte-identical on every statistic — duplicates.",
          "is_bot": false,
          "headline": "docs: addressable set is FIVE ontologies; concept_rules is the workin…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T05:36:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4f813f6deada19fb34a0bd41292a2bd0e49f8c16",
          "body": "… is the wrong selector\n\nGrep found 83/289 DNF onts \"ABox-bearing AND nominal-free\". Ceiling-tested the four\nwith the LARGEST ABox: 0 of 4 rescued, and none is memory-bound (1.1-2.7 GB, not\n46 GB) — they are wall-bound, and 5857 is a TBox-scale DNF (66k classes / 132k GCIs)\nwhere the ABox is inciden\n[…]\nominal-free\nclassify including ones that succeed today — but NOT on DNF recovery.\n\nFifth instance this session of selecting for a feature being PRESENT rather than\nBINDING. Same shape as grep-vs-gate.",
          "is_bot": false,
          "headline": "docs: payoff estimate for the from_internal fix collapses — ABox size…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T05:11:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dfd28309e620a05343383ef66dd2a09beecbfe98",
          "body": "The diagnostic that localized the memory tail. External sampling had refuted six\nmechanisms without identifying a site; in-process probes found it in one run:\nPreparedOntology::from_internal allocates +42.3 GB on an 8.6 MB, 114-class ontology,\ndriven by ~55k ABox axioms that class classification pro\n[…]\nemitted from the serial tier-merge loop rather than the rayon closure so output does\nnot interleave.\n\nVerified inert when unset (0 [rss] lines, pizza output identical); suites green;\nfmt/clippy clean.",
          "is_bot": false,
          "headline": "Merge: RUSTDL_TRACE_RSS phase-trace probes (off by default)",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-30T04:36:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b2adad0dd57094dd2f63dd26ce0cfff4ac738389",
          "body": "…evant ABox\n\nIn-process RSS probes localize it: PreparedOntology::from_internal allocates\n+42.3 GB in one call (3.95 -> 46.26 GB) on an 8.6 MB, 114-CLASS ontology. Split\n~17.9 GB HyperCache::build + ~24.5 GB absorb (tbox-stats: concept_rules =\n49,571,087).\n\nThe driver is ~55k ABox axioms, and ore_on\n[…]\nthe label cache\" is UNPROVEN, not refuted.\nThe D4 and fan-out refutations do not rest on the sweep and still stand. Also\ncorrected: conversion is 3.94 GB, not the 14.2 GB the tbox-stats proxy implied.",
          "is_bot": false,
          "headline": "docs: memory tail ANSWERED — from_internal builds 42 GB from an irrel…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-29T21:32:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b31d5a0f1f25d6abed9ea337bf1a5e846da339da",
          "body": "…wn_internal\n\nNew `rss_probe` module (Linux-only /proc/self/statm read, off-path = one\nrelaxed atomic load via AtomicU8+OnceLock+AtomicBool gate).  Five phase\nprobes in classify_top_down_internal: entry, after_saturate, before/after\nPreparedOntology::from_internal, after_label_cache.  Periodic pair \n[…]\niour\nbyte-identical (inferences verified on pizza.ofn).  Release binary rebuilt.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "diag(rss): add RUSTDL_TRACE_RSS phase-trace probes to classify_top_do…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-29T21:10:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "870f3c2ab876fc6c423e7a7613aa1fe8767dbad9",
          "body": "Third consistency pass on this document, which is the deliverable:\n- header said 'four proposed mechanisms, all four refuted'; it is six\n- the status line still said the discriminating experiment was pending; it ran\n- 'What is established' still listed the two candidates section 7 had killed, and\n  \n[…]\n\n\nRecording that this took three passes: appending findings to a doc without\nre-reading the earlier sections is how it ends up asserting a superseded mechanism\nin one place and refuting it in another.",
          "is_bot": false,
          "headline": "docs: fix internal contradictions in the memory-localization findings",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-29T19:41:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "26999f3224549510da63cf88e9afa29672f624c7",
          "body": "…hypotheses die\n\nSampled VmRSS every 2 s during a single-threaded classify (raw curve committed as\ndocs/benchmarks/2026-07-29-ore9347-rss-curve.tsv, 203 samples). Interpretation rules\nwere written down BEFORE looking, and two of them fired:\n\n1. Growth starts far earlier than the stage split implied.\n[…]\nt's predicted 32x.\n\nSix hypotheses now refuted on this ontology. Per the pre-registered rule for a staircase,\nNO mechanism is named: the next step is in-process instrumentation, not another inference.",
          "is_bot": false,
          "headline": "docs: RSS-over-time on ore_ont_9347 — a staircase, so both remaining …",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-29T19:40:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ce216e3659afe12709bf4faa387e821d2c033837",
          "body": "…ng them\n\nThe shared repo's branch list must stay clean (5 branches), but 45 local branches\nhad no remote copy — an unrecoverable disk-failure exposure. Resolved by pushing\nevery local branch into refs/archive/heads/*, a non-branch ref namespace that\nGitHub stores but does NOT show in the branch lis\n[…]\nSHOT, not a mirror.\n\nAlso de-pins the handoff's \"main is at <SHA>\" header, which went stale as soon as\nthe document was extended — the same failure mode the handoff's own corrections\nsection is about.",
          "is_bot": false,
          "headline": "docs: back branches up under refs/archive/heads/* instead of publishi…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-29T19:26:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ec2a89dca4c7e83f17741d3f7cd1ae669a5b352b",
          "body": "The 6 archive tags anchoring 21 commits (reachable only via stale remote-tracking\nrefs) are on origin as of 2026-07-29, so that set is safe from both a local prune\nand a disk failure. Corrects the \"those tags are local-only\" claim in CLAUDE.md and\nthe handoff, which went stale the moment they were p\n[…]\nicitly that the stale-ref check is NOT once-and-done: re-scan for new\nstale-ref/unique-commit pairs before any future prune.\n\nBranches remain unpushed (origin still has 5); that exposure is unchanged.",
          "is_bot": false,
          "headline": "docs: archive/* tags are now pushed to origin",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-29T19:22:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c14f6cbe74f3e9b043f4e8426b191eeefba8f5b4",
          "body": "CLAUDE.md is loaded every session, so this is the only place a warning actually\nprevents the accident. Records, all verified at commit time:\n\n- origin has 5 branches; the ~38 unmerged local branches exist ONLY on this disk,\n  including years of measured spikes and NO-GO evidence (combo-rewrite-gate \n[…]\nuture prunes need the same check first.\n- six worktrees remain; one has UNCOMMITTED changes that `git worktree remove`\n  would destroy irrecoverably.\n\nFull inventory in docs/handoff-2026-07-29.md §4a.",
          "is_bot": false,
          "headline": "docs: warn in CLAUDE.md that branches are not backed up",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-29T16:19:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e751c611eab80178484ed96417abd9c2e7a46be2",
          "body": "Covers five merges to main (two silent-incompleteness bug families closed, the\nX ⊑ ¬Y canonicalization, the FP=0 gate made honest, memory-tail localization),\nthree arcs closed as NO-GO with their evidence, and the open items ranked by risk.\n\nIncludes a corrections section, because several recorded c\n[…]\ngs anchoring 21 commits that were\nreachable only via stale remote-tracking refs.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "docs: session handoff for 2026-07-29",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-29T15:17:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cfa7433014881485f063a2265408c874e169bf0f",
          "body": "The previous two commits left the document self-contradictory: section 4 asserted\n'it is ONE unbounded graph' as a finding while section 5 refuted exactly that, and a\nsed left an orphaned sentence fragment. Rewritten so the four refuted mechanisms read\nas one coherent narrative, with the inconclusive --pair-timeout-ms row labelled as\nsuch rather than as a null result, and the established/not-established boundary\nstated explicitly.",
          "is_bot": false,
          "headline": "docs: rewrite the memory-localization findings coherently",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-29T15:13:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd64ca38e6ed4c8a32a6179ad14d5ae8b05e12f9",
          "body": "Knob sweep on ore_ont_9347 (single-thread, 130 s):\n  baseline                    36.549 GB\n  RUSTDL_ANYWHERE_BLOCKING=1  36.549 GB   inert\n  RUSTDL_MAX_NODES=50000      36.549 GB   inert (expected: governs the deadline-FREE\n                                          search; classify pairs are deadlin\n[…]\nry RSS\ninstrumentation, then confirmation on 11085 and 5368 before generalising.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "docs: memory localization — four mechanisms proposed, all four refuted",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-29T15:12:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2c99a104ce585d1969399ef57385a5e5ee5ff6ef",
          "body": "…the worst ontology\n\nLocalization pass before building the sparse-subsumer rewrite. Three-stage peak-RSS\nsplit on ore_ont_9347 (the worst-RSS ontology in the tail):\n  convert+absorb only        123.5 s   14.2 GB\n  + EL saturation            152.7 s   19.1 GB\n  full classify              491.7 s  238\n[…]\nD4\nnote alone — it is aimed at a real site, but not the one that dominates here.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "docs: memory-tail localization — the D4 attribution does not explain …",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-29T14:42:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8cb68ea030af597f1754cd93aaf7c2fcd61386a6",
          "body": "The closure-diff net is rustdl's FP=0 gate, and it was reporting success for work\nit never did: every test did `if !fixture.exists() { eprintln!(\"SKIP\"); return; }`,\nso a missing fixture passed. Measured on a real run: of 22 fixture blocks, 13 ran\nand 9 skipped, and `shoiq_knowledge_closure_matches_\n[…]\na 499, alehif 247, ro 158,\nore-15672 142, sulo 51, bibtex 16, all FP=0/MISSED=0.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BPU4DH5DXn2jmpuXdfijF7",
          "is_bot": false,
          "headline": "Merge: make the FP=0 corpus gate report real coverage",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-29T14:02:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fa350a50bf4d32fe634c14bb5c418b63c41e033b",
          "body": "… explicit\n\nCompanion to the require()/optional() tiering: three things that make a green run\nmean something.\n\n1. run-soundness-diff.sh now passes --test-threads=1. The [fp0] coverage lines go\n   to stderr, and parallel test threads interleaved their writes MID-LINE, which\n   corrupted exactly the r\n[…]\n53, pizza 499,\n   alehif 247, ro 158, ore-15672 142, sulo 51, bibtex 16 — all FP=0/MISSED=0) and\n   names the five fixtures still NOT VERIFIED so the optional tier cannot silently\n   become permanent.",
          "is_bot": false,
          "headline": "docs+script: make the FP=0 net's coverage legible and its requirement…",
          "author_name": "Michel Dumontier",
          "author_login": "micheldumontier",
          "committed_at": "2026-07-29T14:02:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 50,
      "commits_last_year": 1489,
      "latest_release_at": "2026-08-01T09:02:22Z",
      "latest_release_tag": "v0.4.9",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 11,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 0.9
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 37,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "xtask",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [
            "automation",
            "macos",
            "release",
            "codesign",
            "xtask",
            "command-line-utilities",
            "development-tools::build-utils"
          ],
          "ecosystem": "crates",
          "matches_repo": false,
          "registry_url": "https://crates.io/crates/xtask",
          "is_deprecated": false,
          "latest_version": "0.1.4",
          "repository_url": "https://github.com/arcboxlabs/xtask",
          "versions_count": 5,
          "total_downloads": 636,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 212,
          "first_published_at": "2026-06-24T11:01:25.012607Z",
          "latest_published_at": "2026-06-30T09:55:36.509458Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 31
        },
        {
          "name": "owl-dl-cli",
          "exists": true,
          "license": "Apache-2.0 OR MIT",
          "keywords": [
            "ontology",
            "owl",
            "semantic-web",
            "reasoner",
            "description-logic",
            "data-structures",
            "science"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/owl-dl-cli",
          "is_deprecated": false,
          "latest_version": "0.3.0",
          "repository_url": "https://github.com/MaastrichtU-IDS/rustdl",
          "versions_count": 5,
          "total_downloads": 87,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 29,
          "first_published_at": "2026-06-04T16:08:20.450439Z",
          "latest_published_at": "2026-06-05T09:46:13.676990Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 56
        },
        {
          "name": "owl-dl-core",
          "exists": true,
          "license": "Apache-2.0 OR MIT",
          "keywords": [
            "ontology",
            "owl",
            "semantic-web",
            "reasoner",
            "description-logic",
            "data-structures",
            "science"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/owl-dl-core",
          "is_deprecated": false,
          "latest_version": "0.3.0",
          "repository_url": "https://github.com/MaastrichtU-IDS/rustdl",
          "versions_count": 5,
          "total_downloads": 260,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 87,
          "first_published_at": "2026-06-04T15:56:48.620747Z",
          "latest_published_at": "2026-06-05T09:45:40.811800Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 56
        },
        {
          "name": "rustdl",
          "exists": true,
          "license": "Apache-2.0 OR MIT",
          "keywords": [
            "owl",
            "ontology",
            "reasoner",
            "description-logic",
            "semantic-web",
            "Development Status :: 4 - Beta",
            "Intended Audience :: Science/Research",
            "License :: OSI Approved :: Apache Software License",
            "License :: OSI Approved :: MIT License",
            "Programming Language :: Python :: 3",
            "Programming Language :: Python :: 3.10",
            "Programming Language :: Python :: 3.11",
            "Programming Language :: Python :: 3.12",
            "Programming Language :: Python :: 3.13",
            "Programming Language :: Rust",
            "Topic :: Scientific/Engineering",
            "Typing :: Typed"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/rustdl/",
          "is_deprecated": false,
          "latest_version": "0.4.9",
          "repository_url": "https://github.com/MaastrichtU-IDS/rustdl",
          "versions_count": 50,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 9605,
          "first_published_at": "2026-06-04T21:28:31.315792Z",
          "latest_published_at": "2026-08-01T09:06:01.987934Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        },
        {
          "name": "owl-dl-tableau",
          "exists": true,
          "license": "Apache-2.0 OR MIT",
          "keywords": [
            "ontology",
            "owl",
            "semantic-web",
            "reasoner",
            "description-logic",
            "data-structures",
            "science"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/owl-dl-tableau",
          "is_deprecated": false,
          "latest_version": "0.3.0",
          "repository_url": "https://github.com/MaastrichtU-IDS/rustdl",
          "versions_count": 5,
          "total_downloads": 176,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 59,
          "first_published_at": "2026-06-04T15:57:36.600978Z",
          "latest_published_at": "2026-06-05T09:45:57.689286Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 56
        },
        {
          "name": "owl-dl-reasoner",
          "exists": true,
          "license": "Apache-2.0 OR MIT",
          "keywords": [
            "ontology",
            "owl",
            "semantic-web",
            "reasoner",
            "description-logic",
            "data-structures",
            "science"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/owl-dl-reasoner",
          "is_deprecated": false,
          "latest_version": "0.3.0",
          "repository_url": "https://github.com/MaastrichtU-IDS/rustdl",
          "versions_count": 5,
          "total_downloads": 142,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 47,
          "first_published_at": "2026-06-04T15:58:02.231380Z",
          "latest_published_at": "2026-06-05T09:46:04.399071Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 56
        }
      ]
    },
    "popularity": {
      "forks": 4,
      "stars": 7,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2026-06-17",
            "count": 1
          },
          {
            "date": "2026-06-21",
            "count": 1
          },
          {
            "date": "2026-07-16",
            "count": 1
          },
          {
            "date": "2026-07-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 4,
        "total_forks": 4
      },
      "star_history": null,
      "open_issues_and_prs": 3
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "crates/owl-dl-py/python/rustdl/py.typed"
      ],
      "toolchain_manifests": [
        "Cargo.toml",
        "crates/owl-dl-bench/Cargo.toml",
        "crates/owl-dl-cb/Cargo.toml",
        "crates/owl-dl-cli/Cargo.toml",
        "crates/owl-dl-core/Cargo.toml",
        "crates/owl-dl-datatypes/Cargo.toml",
        "crates/owl-dl-py/Cargo.toml",
        "crates/owl-dl-reasoner/Cargo.toml",
        "crates/owl-dl-saturation/Cargo.toml",
        "crates/owl-dl-tableau/Cargo.toml",
        "protege/pom.xml",
        "xtask/Cargo.toml"
      ],
      "largest_source_bytes": 388832,
      "source_files_sampled": 239,
      "oversized_source_files": 12,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 103216
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml",
        "protege/pom.xml",
        "xtask/Cargo.toml"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "crates",
        "maven"
      ],
      "dependencies": [
        {
          "name": "com.google.code.gson:gson",
          "manifest": "protege/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${gson.version}"
        },
        {
          "name": "net.sourceforge.owlapi:owlexplanation",
          "manifest": "protege/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${owlexplanation.version}"
        },
        {
          "name": "net.sourceforge.owlapi:telemetry",
          "manifest": "protege/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${telemetry.version}"
        },
        {
          "name": "org.liveontologies:puli",
          "manifest": "protege/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${puli.version}"
        },
        {
          "name": "org.liveontologies:owlapi-proof",
          "manifest": "protege/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${owlapi-proof.version}"
        },
        {
          "name": "org.liveontologies:protege-proof-explanation",
          "manifest": "protege/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${protege-proof-explanation.version}"
        },
        {
          "name": "io.github.liveontologies:protege-proof-justification",
          "manifest": "protege/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${protege-proof-justification.version}"
        },
        {
          "name": "clap",
          "manifest": "xtask/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "anyhow",
          "manifest": "xtask/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-reasoner",
          "manifest": "crates/owl-dl-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-core",
          "manifest": "crates/owl-dl-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-saturation",
          "manifest": "crates/owl-dl-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "horned-owl",
          "manifest": "crates/owl-dl-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "clap",
          "manifest": "crates/owl-dl-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "anyhow",
          "manifest": "crates/owl-dl-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "crates/owl-dl-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/owl-dl-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "walkdir",
          "manifest": "crates/owl-dl-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "sha2",
          "manifest": "crates/owl-dl-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10"
        },
        {
          "name": "tracing",
          "manifest": "crates/owl-dl-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing-subscriber",
          "manifest": "crates/owl-dl-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "whelk",
          "manifest": "crates/owl-dl-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "pprof",
          "manifest": "crates/owl-dl-bench/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.14"
        },
        {
          "name": "owl-dl-core",
          "manifest": "crates/owl-dl-cb/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "hashbrown",
          "manifest": "crates/owl-dl-cb/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-core",
          "manifest": "crates/owl-dl-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-reasoner",
          "manifest": "crates/owl-dl-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "horned-owl",
          "manifest": "crates/owl-dl-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "clap",
          "manifest": "crates/owl-dl-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "anyhow",
          "manifest": "crates/owl-dl-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "crates/owl-dl-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/owl-dl-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing",
          "manifest": "crates/owl-dl-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing-subscriber",
          "manifest": "crates/owl-dl-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "horned-owl",
          "manifest": "crates/owl-dl-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "hashbrown",
          "manifest": "crates/owl-dl-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "smallvec",
          "manifest": "crates/owl-dl-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "bitvec",
          "manifest": "crates/owl-dl-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "bumpalo",
          "manifest": "crates/owl-dl-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thiserror",
          "manifest": "crates/owl-dl-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing",
          "manifest": "crates/owl-dl-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-core",
          "manifest": "crates/owl-dl-datatypes/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thiserror",
          "manifest": "crates/owl-dl-datatypes/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing",
          "manifest": "crates/owl-dl-datatypes/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "pyo3",
          "manifest": "crates/owl-dl-py/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.29"
        },
        {
          "name": "owl-dl-reasoner",
          "manifest": "crates/owl-dl-py/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-core",
          "manifest": "crates/owl-dl-py/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "horned-owl",
          "manifest": "crates/owl-dl-py/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thiserror",
          "manifest": "crates/owl-dl-py/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "anyhow",
          "manifest": "crates/owl-dl-reasoner/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-core",
          "manifest": "crates/owl-dl-reasoner/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-saturation",
          "manifest": "crates/owl-dl-reasoner/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-tableau",
          "manifest": "crates/owl-dl-reasoner/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-datatypes",
          "manifest": "crates/owl-dl-reasoner/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "horned-owl",
          "manifest": "crates/owl-dl-reasoner/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rayon",
          "manifest": "crates/owl-dl-reasoner/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "dashmap",
          "manifest": "crates/owl-dl-reasoner/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "fixedbitset",
          "manifest": "crates/owl-dl-reasoner/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thiserror",
          "manifest": "crates/owl-dl-reasoner/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing",
          "manifest": "crates/owl-dl-reasoner/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-core",
          "manifest": "crates/owl-dl-saturation/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "hashbrown",
          "manifest": "crates/owl-dl-saturation/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "smallvec",
          "manifest": "crates/owl-dl-saturation/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rayon",
          "manifest": "crates/owl-dl-saturation/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "dashmap",
          "manifest": "crates/owl-dl-saturation/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "fixedbitset",
          "manifest": "crates/owl-dl-saturation/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thiserror",
          "manifest": "crates/owl-dl-saturation/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing",
          "manifest": "crates/owl-dl-saturation/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-core",
          "manifest": "crates/owl-dl-tableau/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-datatypes",
          "manifest": "crates/owl-dl-tableau/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "owl-dl-saturation",
          "manifest": "crates/owl-dl-tableau/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "hashbrown",
          "manifest": "crates/owl-dl-tableau/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "smallvec",
          "manifest": "crates/owl-dl-tableau/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "bitvec",
          "manifest": "crates/owl-dl-tableau/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "bumpalo",
          "manifest": "crates/owl-dl-tableau/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thiserror",
          "manifest": "crates/owl-dl-tableau/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing",
          "manifest": "crates/owl-dl-tableau/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 34,
        "open_issues": 3,
        "closed_ratio": 0.824,
        "closed_issues": 14,
        "closed_unmerged_prs": 6
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "micheldumontier",
          "commits": 1316,
          "avatar_url": "https://avatars.githubusercontent.com/u/993852?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "java-ci.yml",
        "python-ci.yml",
        "release-cli.yml",
        "release-python.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 7 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 2,
            "reason": "dependency not pinned by hash detected -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "21 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "f8d733485c017bb1f5c2d0199b43a9074b8912d9",
        "ran_at": "2026-08-01T09:09:03Z",
        "aggregate_score": 2.8,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-08-01T09:03:22Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-27T12:26:41Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": [
        {
          "number": 42,
          "created_at": "2026-07-24T06:36:57Z",
          "last_comment_at": "2026-07-25T15:47:59Z",
          "last_comment_author": "micheldumontier"
        },
        {
          "number": 49,
          "created_at": "2026-07-24T11:29:06Z",
          "last_comment_at": "2026-07-27T16:38:19Z",
          "last_comment_author": "micheldumontier"
        },
        {
          "number": 56,
          "created_at": "2026-07-26T12:29:10Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/MaastrichtU-IDS/rustdl",
    "host": "github.com",
    "name": "rustdl",
    "owner": "MaastrichtU-IDS"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 55,
      "inputs": {
        "security": 28,
        "vitality": 73,
        "community": 41,
        "governance": 61,
        "engineering": 62
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 73,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "commits_last_year": 1489,
              "human_commit_share": 0.96,
              "days_since_last_push": 0,
              "active_weeks_last_year": 11
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "11/52 weeks with commits",
                "points": 7.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 11
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1489 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1489
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 50,
              "latest_release_tag": "v0.4.9",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 0.9
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "50 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 50
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.9 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.9
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 41,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 17,
            "inputs": {
              "forks": 4,
              "stars": 7,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "7 stars",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "4 forks",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 66,
            "inputs": {
              "packages": [
                "owl-dl-cli",
                "owl-dl-core",
                "rustdl",
                "owl-dl-tableau",
                "owl-dl-reasoner"
              ],
              "dependents": null,
              "ecosystems": "crates, pypi",
              "total_downloads": 665,
              "monthly_downloads": 9827
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "9,827 downloads/month across crates, pypi",
                "points": 53.2,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 9827,
                      "ecosystems": "crates, pypi"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 61,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 7 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "merged_prs": 34,
              "open_issues": 3,
              "closed_issues": 14,
              "issue_closed_ratio": 0.824,
              "closed_unmerged_prs": 6
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "82% of issues closed",
                "points": 38.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 82
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "34/40 decided PRs merged",
                "points": 32.5,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 34,
                      "decided": 40
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 69,
            "inputs": {
              "followers": 77,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "MaastrichtU-IDS",
              "public_repos": 217,
              "account_age_days": 3095
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "77 followers of MaastrichtU-IDS",
                "points": 13.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 77,
                      "login": "MaastrichtU-IDS"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "217 public repos, account ~8 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 217
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 8
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "owl-dl-cli",
                "owl-dl-core",
                "rustdl",
                "owl-dl-tableau",
                "owl-dl-reasoner"
              ],
              "ecosystems": "crates, pypi",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "5 package(s) on crates, pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 5,
                      "ecosystems": "crates, pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "50 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 50
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 62,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "5 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 28,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 28,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 2.8
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 7 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 2",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "21 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 73,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.979,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 103216
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "94 of 96 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 94,
                      "sampled": 96
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "crates/owl-dl-py/python/rustdl/py.typed"
              ],
              "agent_commit_share": 0.21,
              "toolchain_manifests": [
                "Cargo.toml",
                "crates/owl-dl-bench/Cargo.toml",
                "crates/owl-dl-cb/Cargo.toml",
                "crates/owl-dl-cli/Cargo.toml",
                "crates/owl-dl-core/Cargo.toml",
                "crates/owl-dl-datatypes/Cargo.toml",
                "crates/owl-dl-py/Cargo.toml",
                "crates/owl-dl-reasoner/Cargo.toml",
                "crates/owl-dl-saturation/Cargo.toml",
                "crates/owl-dl-tableau/Cargo.toml",
                "protege/pom.xml",
                "xtask/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Cargo.toml, crates/owl-dl-bench/Cargo.toml, crates/owl-dl-cb/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "Cargo.toml, crates/owl-dl-bench/Cargo.toml, crates/owl-dl-cb/Cargo.toml"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "crates/owl-dl-py/python/rustdl/py.typed",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "crates/owl-dl-py/python/rustdl/py.typed"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "21 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 21,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 2",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 97,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 388832,
              "source_files_sampled": 239,
              "oversized_source_files": 12
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "12/239 source files over 60KB",
                "points": 52.2,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 239,
                      "oversized": 12
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch maven package 'nl.maastrichtuniversity.ids:rustdl-protege' from its registry",
    "crates package 'xtask' points at a different repository (https://github.com/arcboxlabs/xtask); excluded from ecosystem scoring",
    "Could not fetch crates package 'owl-dl-cb' from its registry",
    "Could not fetch crates package 'owl-dl-py' from its registry",
    "Could not fetch crates package 'owl-dl-bench' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index pypi:rustdl@0.4.9; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-08-01T09:09:19.455307Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/m/MaastrichtU-IDS/rustdl.svg",
  "full_name": "MaastrichtU-IDS/rustdl",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticscrates.io, PyPI.