feat(discourse): argumentation organ — argument mining + Aristotelian typing (②+③) - #133
Merged
Conversation
…raph procyber.discourse.argument_mining — the one new organ of the argumentation surface. A deterministic, fail-closed extractor over discourse connectives (because/therefore/however): turns a message into a typed argument graph (claims, premises, support/attack relations), never inventing a relation a connective doesn't license. An LLM-backed miner is a drop-in behind the Miner protocol. Composes upward without coupling: mine() optionally feeds entity co-occurrences to any object with co_occur(a,b) — e.g. dynamics.AssociativeMemory (the memory organ) — duck-typed, no import dep. Proof: tests/test_argument_mining.py (9) — premise->claim support, premise->conclusion support, rebuttal attack (intra + inter sentence), bare-claim/no-hallucination, empty=empty, determinism, co-occurrence hand-off, hellgraph-shaped fragment.
…nt units procyber.discourse.categories — types the units the miner emits by Aristotle's ten Categories (substance + nine accidents), reading the predication a copula licenses: "S is a P" => S instance-of class P (secondary substance); "S is Q" => quality; "S is ...-er than O" => relation; numeral => quantity. Deterministic, fail-closed (no pattern => nothing forced). Yields the primary/secondary- substance = instance/class distinction the AtomSpace/KKO lattice consumes. Proof: tests/test_categories.py (8); composes with argument_mining via categorize_graph.
mdheller
added a commit
that referenced
this pull request
Aug 4, 2026
…gy + ④ ingest + ⑤ index (#134) The 5-diagram spine had ① memory (dynamics.py #132) + ② discourse (argument_mining.py #133); this lands the last three organs, all off the SAME Aristotelian/VSA substrate so ingestion, typing and retrieval never drift: - ⑤ INDEX procyber/semantic/semantic_index.py — Hamming NN retrieval over SemanticHasher codes. Ranks by semantic similarity (E[H/n]=θ/π), bounds by radius, and `codes_hex` exports exactly a hyper-feed -manifest.v0 payload — a node's index IS its mesh federation advertisement. - ④ INGEST procyber/lod/triplify.py — text → RDF triples, the category fixing the predicate (substance → standard rdf:type; relation/quantity/quality → disc: predicates). Fail-closed. - ③ ONTOLOGY procyber/ontology/atomspace.py — Aristotle's primary/secondary substance → the AtomSpace type-inheritance lattice (MemberLink instance / InheritanceLink subclass; accidents → EvaluationLink). Standard OpenCog atom types — the lattice a PLN reasoner walks (KKO-IRI grounding is the next step). 14 theorems (⑤ self-retrieval + rank agreement + radius + manifest-code round-trip; ④ one triple per category + rdf:type interop + fail-closed; ③ instance vs subclass vs evaluation + composes a lattice). Registered in the cleanroom FRAMEWORK_FILES — checker clean, 27 files scanned. Pure-Python, deterministic.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The one new organ: Argument Mining
The argumentation-surface plan found the discourse pipeline is 13 of 14 organs the estate already runs — the single thing to build is Argument Mining: turning a message into a typed argument graph (claims, premises, support/attack relations) — the structure a scalar engagement score discards. This is that organ's core.
v1: deterministic, fail-closed, rule-based
Extracts over discourse connectives —
because/therefore/however(the premise→conclusion cues argumentation theory has read as structure since Aristotle). It never invents a relation a connective doesn't license, so an unmarked sentence is a bare claim, not a hallucinated argument. An LLM-backed miner is a drop-in behind theMinerprotocol — same output type, richer extraction — but the rule-based baseline is what we can prove.Composes with the spine, without coupling
mine(text, cooccurrence_sink=...)feeds entity co-occurrences to any object withco_occur(a, b), i.e.dynamics.AssociativeMemory(feat(semantic): knowledge-memory substrate — dynamics organ + living twin + semantic-hash index #132). Duck-typed → no import dependency on the dynamics organ.ArgumentGraph.to_dict()is the typed{units, relations}fragment for hellgraph.Proof
pytest tests/test_argument_mining.py— 9 theorems: premise→claim support, premise→conclusion support, rebuttal attack (intra- and inter-sentence), no-marker ⇒ bare-claim (no hallucination), empty ⇒ empty, determinism, co-occurrence hand-off, hellgraph-shaped fragment.Next slices (separate PRs)
Richer typing via KKO/Aristotle categories (③); the LLM-backed
Miner; the event-bus service + hellgraph writer + receipts (the deployable organ).