Skip to content

Add OntoDAG to Libraries - #40

Merged
crtahlin merged 1 commit into
ethersphere:mainfrom
petfold:add-ontodag
Aug 10, 2026
Merged

Add OntoDAG to Libraries#40
crtahlin merged 1 commit into
ethersphere:mainfrom
petfold:add-ontodag

Conversation

@petfold

@petfold petfold commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Adds OntoDAG to the Libraries section.

[OntoDAG](https://github.com/petfold/ontodag) - Category DAG on Swarm: canonical content-addressed roots, queries as intersections of subcategories, coordination-free merge between writers.

What it is. A Python library and odag CLI for a subsumption-only ontology: a multi-parent category DAG kept in transitively reduced form, queried by intersecting descendant cones. Categories can carry typed values (weight(3kg), time(2026-08-15)) whose order is computed exactly from the name, with no edges stored.

Swarm relation. Persistence is a first-class Swarm backend: odag set store swarm:NAME stores records through Bee's /bytes endpoint via recordstore (already listed here) and publishes the mutable latest-root in a signed Swarm feed, so a store can be followed and rehydrated from the network alone. Because the transitive reduction of a DAG is unique, equal knowledge yields the byte-identical root regardless of insertion order — which is what makes stores diffable, mergeable between writers without coordination, and verifiable (is_below answers ship with proofs against the root). Validated repeatedly against a live Bee light node on Gnosis mainnet, including scorched-earth rehydration purely via the feed.

Checklist

  • One item, one PR.
  • Public, not archived, BSD-3-Clause LICENSE, active (last push 2026-08-07).
  • Link resolves; description is 141 characters, sentence case, matches this repository.
  • Not already listed in README.md / archived.md, and no open PR or issue for it.

🤖 Generated with Claude Code

crtahlin added a commit that referenced this pull request Aug 10, 2026
* chore: add .gitattributes normalising text files to LF

README.md is the only file in the repository with CRLF endings; it was LF
from the initial commit until a single edit in April 2026 introduced them.
Contributors on normalising editors therefore rewrite all 150 lines, turning
one-line additions into ~150-line diffs (#40, #41) and creating avoidable
conflicts between PRs that append to different sections.

merge=union on the lists keeps both sides when two branches each append a
different entry, matching sindresorhus/awesome.

Refs #42

* chore: normalise README.md line endings to LF

No content change: the file is byte-identical once carriage returns are
stripped. Isolated in its own commit so the one-off 150-line diff is
reviewable here rather than buried in a contributor's feature PR.

Refs #42
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@crtahlin crtahlin left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving — entry checks out.

  • Format: 141 characters, sentence case, link resolves, not already listed.
  • Repository: public, not archived, BSD-3-Clause, actively developed.
  • Swarm relevance: recordstore is a base dependency rather than an optional extra, so Swarm persistence works on a bare install; signed-feed roots and odag swarm back that up.
  • Description accuracy: "coordination-free merge between writers" is shipped — EagerOntoDAG.sync landed in 0.5.0. Worth noting docs/SWARM_DESIGN.md §5 is still headed "not yet implemented", which understates the current state; you may want to refresh it.
  • Libraries is the right section, alongside recordstore and swarmfs.

I rebased the branch onto main and force-pushed, since #43 normalised the repository to LF line endings and landed between your submission and this review. That turned the diff from +152/−150 into the two lines actually being added; your authorship is unchanged. Apologies for touching your branch — it was our change that caused the conflict, and the fix was already verified locally.

@crtahlin
crtahlin merged commit 7800cba into ethersphere:main Aug 10, 2026
3 checks passed
petfold added a commit to petfold/ontodag that referenced this pull request Aug 18, 2026
The section heading, its "Not started." paragraph, and the claim that
SwarmFeedPointer is "a documented stub" all predate the work and were
contradicted by an update block lower in the same section — so a
top-down reader concluded the opposite of the truth.

What actually shipped: EagerOntoDAG.sync (0.5.0), delta-driven via
RecordStore.diff since 2026-08-04 and available on SparseOntoDAG too;
SwarmFeedPointer real since recordstore 0.4.0 (secp256k1 SOC signing),
adopted by the swarm:NAME backend and validated on a live
Gnosis-mainnet node. FilePointer is now described as the deliberate
keyless fallback it is, not as a stand-in for missing signing.

Kept explicit as open: the tombstone / observed-remove decision (the
shipped stance is grow-only) and the GSOC operation feed, which is an
optional transport on top of the fold rather than a prerequisite.

Raised by crtahlin reviewing ethersphere/awesome-swarm#40, where the
stale section undercut the entry's own "coordination-free merge
between writers" claim.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@petfold

petfold commented Aug 18, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for the thorough review — and no apology needed for the rebase, #43 was your side keeping the repo tidy and the diff is right.

You were correct about SWARM_DESIGN.md §5: the heading, its "Not started" paragraph and the "SwarmFeedPointer is a documented stub" line all predated the work, while an update block lower in the same section recorded that it had shipped — so reading top-down gave the opposite of the truth. Fixed in petfold/ontodag@1e6dacf: EagerOntoDAG.sync (0.5.0, delta-driven via RecordStore.diff since August, and on SparseOntoDAG too), the signed feed real since recordstore 0.4.0 and validated against a live Gnosis-mainnet node. What's genuinely still open is now stated as such — the tombstone / observed-remove decision (the shipped stance is grow-only) and the GSOC operation feed, which is optional transport on top of the fold rather than a prerequisite.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants