Skip to content

Move ARC's counter-selection out of the interaction graph (#300) - #305

Merged
realmarcin merged 1 commit into
mainfrom
arc-exclusion-modeling-300
Aug 3, 2026
Merged

Move ARC's counter-selection out of the interaction graph (#300)#305
realmarcin merged 1 commit into
mainfrom
arc-exclusion-modeling-300

Conversation

@realmarcin

@realmarcin realmarcin commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Fixes #300.

The problem was in the graph, not the prose

CommunityMech:000314 carried a typed Bacillus → Bradyrhizobium COMPETITION edge recording that three candidate Bacillus isolates inhibited the rhizobium and were excluded from the community on that basis.

The source names the retained isolates but not the excluded ones, so both sets ground to the same genus-level NCBITaxon:1386. A consumer reading only the typed edges therefore saw a community whose own member antagonises the very mutualist it was assembled to spare — the exact opposite of the finding.

The record already carried supports: PARTIAL and explanatory notes. That did not help: the misleading claim lives in the graph, and prose beside it does not reach anyone consuming the edges.

Where it went instead

CommunityEngineeringDesign already has notes and evidence, so the counter-selection moves there with its snippet intact and an explanation of why it is not an interaction. No schema change was needed — this is option 3 of the three in #300.

Nothing is lost. The exclusion is what explains the community's membership, and it is now recorded as a property of the design rather than as a relation between two taxa. The Bradyrhizobium taxon note points at it, so the connection is findable from either end.

Measured trade-off, and what it exposed

Removing the pairwise edge leaves the record with only COMMUNITY_LEVEL interactions, which the auditor credits with no connections at all. Network findings go 34 → 36; both new ones are DISCONNECTED, the soft category.

Chasing that down produced a sharper finding, filed as #304: the DISCONNECTED rule exempts any taxon carrying abundance_level or functional_role (auditor.py:258). So removing this record's fabricated abundance values — correctly, during #298's review — is itself what exposed its taxa. The audit currently scores a record better for carrying invented abundances than for honestly omitting them.

That also explains why 107 of 302 all-COMMUNITY_LEVEL records do not already flood the audit: the exemption is doing the work, not the connectivity check. It is concrete evidence for the policy question #273 has to settle before that gate can be restored.

Verification

  • Record passes schema and id↔label; all 10 snippets remain verbatim.
  • The interaction graph now contains only the two genuine community-level effects (pathogen suppression, nodulation facilitation).
  • 591 tests pass.

🤖 Generated with Claude Code


Review round

Rebased onto main so this runs against the snippet-truncation gate from #303; the record passes it.

Three things checked rather than assumed, none of which turned into a change:

Is the counter-selection snippet now duplicated? It appears twice — on engineering_design.evidence and on the Bradyrhizobium taxon entry. That is not a defect: 269 of 307 records (88%) reuse a snippet across assertions, because one sentence legitimately supports several claims. Here the two uses are genuinely different — one records the design constraint, the other records why Bradyrhizobium is in the record at all.

Does removing the edge create an inconsistency with other records? Searching for interactions describing exclusion found six candidates, and all six are false positives on inspection — Paraburkholderia Competitive Exclusion is genuine ecological competitive exclusion, "excludes non-acidophilic contaminants" is an environmental effect, "excludes direct cell contact" describes an experimental control. No other record models a screening result as an interaction, so ARC was unique and this fix does not leave the KB inconsistent.

Is supports: SUPPORT right on the moved evidence? The original edge carried PARTIAL, correctly, because the snippet did not fully support the interaction claim it was attached to. Moved onto the design, the snippet directly states the fact it now supports — three isolates antagonised the rhizobium — so SUPPORT is the accurate level. The change in level is principled, not a relaxation.

One consequence worth recording

The fact is now accurate but no longer machine-queryable. A consumer asking "which communities involve Bradyrhizobium antagonism" will not find ARC through the graph, because the only faithful place to put the constraint was prose.

That is the right trade for this record and the wrong situation in general: the schema can express what a community is but not what it was deliberately not — no home for screened-out candidates, compatibility constraints, or load-bearing negative results, which is how most SynComs are actually built. Filed as #307 with a counter_selection sketch. Combined with #304, the honest modelling choice is currently penalised twice: it loses queryability and gains DISCONNECTED findings.

899 tests pass; lint clean; record passes schema and id↔label.

Copilot AI review requested due to automatic review settings August 2, 2026 07:21
@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown

Network integrity findings

Reporting only — this check does not fail the build (see issue #273).

Network Integrity Audit Report
================================================================================


ANME_SRB_Anaerobic_Methanotrophic_Syntrophic_Consortia
--------------------------------------------------------------------------------
  UNKNOWN_SOURCE: Source taxon 'ANME-1' not found in taxonomy section
  UNKNOWN_TARGET: Target taxon 'Desulfofervidus' not found in taxonomy section
  UNKNOWN_SOURCE: Source taxon 'ANME-2a' not found in taxonomy section
  UNKNOWN_TARGET: Target taxon 'Seep-SRB1' not found in taxonomy section

Total: 4 issues

Bay_Area_Sewage_SARS_CoV2_Surveillance_Community
--------------------------------------------------------------------------------
  DISCONNECTED: Taxon 'SARS-CoV-2 sewage population' has no interactions

Total: 1 issues

Chlorella_Keystone_Taxa_Antifungal_SynCom
--------------------------------------------------------------------------------
  DISCONNECTED: Taxon 'Brevibacterium' has no interactions
  DISCONNECTED: Taxon 'Duganella' has no interactions
  DISCONNECTED: Taxon 'Fusarium oxysporum' has no interactions
  DISCONNECTED: Taxon 'strawberry' has no interactions
  DISCONNECTED: Taxon 'tomato' has no interactions

Total: 5 issues

Crucian_Carp_Gut_Disease_Resistance_SynCom
--------------------------------------------------------------------------------
  DISCONNECTED: Taxon 'Cetobacterium' has no interactions
  DISCONNECTED: Taxon 'Paraclostridium' has no interactions
  DISCONNECTED: Taxon 'Pseudomonas' has no interactions

Total: 3 issues

Ensifer_YF2_Sphingobacterium_Y2_Polyethylene_Degrading_Consortium
--------------------------------------------------------------------------------
  DISCONNECTED: Taxon 'Chryseobacterium sp. MF1' has no interactions

Total: 1 issues

Lunar_Martian_Simulant_PGPB_Lettuce_SynCom
--------------------------------------------------------------------------------
  DISCONNECTED: Taxon 'Azotobacter chroococcum 76A' has no interactions
  DISCONNECTED: Taxon 'Kosakonia pseudosacchari TL13' has no interactions
  DISCONNECTED: Taxon 'Methylobacterium populi VP2' has no interactions
  DISCONNECTED: Taxon 'Priestia megaterium EL5' has no interactions

Total: 4 issues

Lunar_Simulant_Phosphate_Solubilizing_Bacteria_Nicotiana
--------------------------------------------------------------------------------
  DISCONNECTED: Taxon 'Bacillus licheniformis (ATCC 11946)' has no interactions
  DISCONNECTED: Taxon 'Bacillus megaterium (AS1.217)' has no interactions
  DISCONNECTED: Taxon 'Bacillus mucilaginosus (AS1.232)' has no interactions
  DISCONNECTED: Taxon 'Bacillus subtilis (CMCC 63501)' has no interactions
  DISCONNECTED: Taxon 'Pseudomonas fluorescens (ATCC 13525)' has no interactions

Total: 5 issues

Moss_Microbe_Complex_Regolith_Biofertilizer
--------------------------------------------------------------------------------
  DISCONNECTED: Taxon 'Bacillus cereus' has no interactions
  DISCONNECTED: Taxon 'Devosia sp.' has no interactions
  DISCONNECTED: Taxon 'Pseudomonas monteilii' has no interactions

Total: 3 issues

Pinus_armandii_Endophytic_Biocontrol_SynCom
--------------------------------------------------------------------------------
  DISCONNECTED: Taxon 'Bacillus subtilis NA11' has no interactions
  DISCONNECTED: Taxon 'Bacillus velezensis NA3' has no interactions
  DISCONNECTED: Taxon 'Bacillus velezensis OB3' has no interactions
  DISCONNECTED: Taxon 'Paenibacillus terrae RE7' has no interactions
  DISCONNECTED: Taxon 'Pseudomonas koreensis RC1' has no interactions

Total: 5 issues

SynCom_ARC_Peanut_Aflatoxin_Nodulation
--------------------------------------------------------------------------------
  DISCONNECTED: Taxon 'Aspergillus flavus' has no interactions
  DISCONNECTED: Taxon 'Bacillus (ARC strains Bl13-2C11, Ba13-20E05, Bm14-5G09)' has no interactions
  DISCONNECTED: Taxon 'Bradyrhizobium PHNZY-24-6' has no interactions
  DISCONNECTED: Taxon 'Enterobacter (ARC strain El17-4B09)' has no interactions
  DISCONNECTED: Taxon 'peanut' has no interactions

Total: 5 issues

The full report is attached to the workflow run as an artifact.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the curated community record CommunityMech:000314 (SynCom ARC) to prevent a misleading pairwise interaction from appearing in the ecological interaction graph when the paper cannot distinguish included vs excluded Bacillus isolates at the available taxonomic resolution.

Changes:

  • Moves the “counter-selection / excluded candidate strains inhibited Bradyrhizobium” fact from a typed PAIRWISE COMPETITION edge into engineering_design.notes + engineering_design.evidence.
  • Updates the Bradyrhizobium taxon note to point readers to the design-level counter-selection record.
  • Removes the misleading pairwise interaction entry so the remaining graph only contains genuine COMMUNITY_LEVEL effects.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 127 to +131
notes: The nitrogen-fixing symbiont whose compatibility constrained community assembly, and
whose nodulation ARC is designed to induce. Not an inoculated ARC member; it is the mutualist
the community must not antagonise.
the community must not antagonise. The counter-selection that excluded Bradyrhizobium-
antagonising candidates is recorded under engineering_design, not as an interaction — see the
note there.
CommunityMech:000314 carried a typed Bacillus -> Bradyrhizobium COMPETITION edge
recording that three candidate Bacillus isolates inhibited the rhizobium and were
excluded from the community on that basis.

The problem is resolution. The source names the retained isolates but not the
excluded ones, so both sets ground to the same genus-level NCBITaxon:1386. A
consumer reading only the typed edges therefore saw a community whose own member
antagonises the very mutualist the community was assembled to spare — the exact
opposite of the finding. Prose caveats on the interaction did not help, because
the misleading claim is in the graph, not the prose.

CommunityEngineeringDesign already has `notes` and `evidence`, so the fact moves
there with its snippet intact and an explanation of why it is not an interaction.
Nothing is lost: the counter-selection is what explains the community's
membership, and it is now recorded where it belongs — as a property of the design
rather than as a relation between two taxa. The Bradyrhizobium taxon note points
at it so the connection is findable from either end.

No schema change was needed, which was option 3 of the three in #300.

Trade-off, measured: removing the pairwise edge leaves the record with only
COMMUNITY_LEVEL interactions, and the auditor credits those with no connections
at all, so network findings go 34 -> 36. Both new ones are DISCONNECTED, the soft
category. Filed as #304, because the underlying rule turns out to reward
unsourced metadata — a taxon is exempt from DISCONNECTED if it carries
abundance_level or functional_role, so removing the fabricated abundances from
this record (correctly, in #298's review) is itself what exposed its taxa. That
is sharper evidence for the policy question #273 has to settle.

Record still passes schema and id<->label; 10 snippets verbatim.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@realmarcin
realmarcin force-pushed the arc-exclusion-modeling-300 branch from d60ec5f to 512b8ed Compare August 3, 2026 03:34
@realmarcin
realmarcin merged commit 6cd7698 into main Aug 3, 2026
6 checks passed
@realmarcin
realmarcin deleted the arc-exclusion-modeling-300 branch August 3, 2026 03:42
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.

Genus-level grounding conflates included and excluded strains in SynCom ARC (000314)

2 participants