From 2292b881176fdeb45af402864408222ea6a34fb3 Mon Sep 17 00:00:00 2001 From: "marcin p. joachimiak" <4625870+realmarcin@users.noreply.github.com> Date: Wed, 7 Oct 2026 01:58:25 -0700 Subject: [PATCH 1/2] Support scoped website rechecks and derived fleet membership Preserve baseline census and feature verdicts while representing later site-specific audit dates and methods. Fix effective audit dates in the update checker (refs #392). Independently reviewed; 202 offline tests and assembly freshness pass. --- CLAUDE.md | 18 +++++-- _fleet/README.md | 33 ++++++++---- _fleet/mechs_template.md | 10 ++-- mechs.md | 11 ++-- scripts/fleet/assemble_page.py | 62 +++++++++++++++++++-- scripts/fleet/check_updates.py | 5 +- tests/test_fleet_page.py | 6 ++- tests/test_site_features.py | 96 ++++++++++++++++++++++++++++++++- tests/test_suite_integration.py | 47 +++++++++++++++- tests/test_suite_updates.py | 51 ++++++++++++++++++ 10 files changed, 304 insertions(+), 35 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 0dd2b7a..fda7c1f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -80,8 +80,9 @@ The suite has twelve Mechs, all under https://github.com/CultureBotAI, plus the orchestrator `culturebotai-claw`. Three have pages here; the others link to their own GitHub Pages sites. DUFMech's card links its Pages dashboard and seed snapshot, the source of its count; the dashboard went live on 2026-10-05. -CLAW's manifest lists eleven members, including PathwayMech; DUFMech is a -separately listed suite member not yet declared in that manifest. +CLAW membership is read from `_fleet/data/manifest.json`, independently of +suite coverage. An absent declaration remains undeclared; neither a suite card +nor a website feature verdict implies admission. `mechs.md` (`/mechs/`) is **generated**. Edit its sources, never the page: `_fleet/mechs_template.md` (prose, cards, the cross-reference list), @@ -110,7 +111,8 @@ Sources, refreshed differently: `_fleet/data/manifest.json`, refreshed with `scripts/fleet/refresh_manifest.py --claw-root `, separately from the census. Its tooltips quote claw's reasons verbatim. The site lists - twelve Mechs, while this manifest currently lists eleven. + twelve Mechs; the membership count and undeclared-project prose are derived + from the snapshot, not maintained as a separate count. - **All twelve corpora:** PathwayMech records and DUFMech seed families use the common census, subset, statistics and site-audit pipeline. DUFMech's frozen JSON worklist is validated and projected into individual family documents; @@ -138,14 +140,20 @@ Sources, refreshed differently: hand-curated too, but judged on the live sites on its `checked_on` date rather than at the pins: one verdict per feature per site, with criteria in its catalogue and each site's github-pages `deployed_revision`. + A later site-only recheck adds that Mech's own `checked_on` and `scope` + together, backed by a successful deployed revision and browser evidence for + every feature. Its date and method render separately; leave the baseline + date and other sites unchanged. Schema-documentation prose reflects the + website verdict, never an inference about whether a repository has a schema. Last full data refresh was 2026-10-05, pinned at 03:20 UTC. All twelve Mechs participate in the census, overlap assets and repository statistics, including PathwayMech's 152 records and DUFMech's 6,532 seed families. TraitMech has 1,005 records and CellStructureMech 885 at those pins. TaxonMech joined the census in #87. Shared identifiers draw vocabulary chords; direct-reference arrows require -committed evidence as described in `_fleet/README.md`. CLAW still declares only -eleven members, so DUFMech's capability row remains explicitly undeclared. +committed evidence as described in `_fleet/README.md`. Membership and website +audits can advance independently of these census pins; neither refresh is +permission to redate or recount the other inputs. The suite licensing policy is CC BY 4.0 for data and BSD-3-Clause for code. Redistributed source material retains its applicable terms. diff --git a/_fleet/README.md b/_fleet/README.md index ceaa91d..7aacee6 100644 --- a/_fleet/README.md +++ b/_fleet/README.md @@ -24,6 +24,17 @@ the deployment ID is `success` before recording its SHA; a queued or failed deployment request does not identify the currently served site. The update checker reports such unverified states as `NOT CHECKED`. + For a later site-only recheck, add `checked_on` and `scope` together to that + Mech's entry, update its `deployed_revision` to the successfully served SHA, + and reassess every feature against browser evidence. The row date must be + a canonical `YYYY-MM-DD` no earlier than the baseline. The assembler shows + the exception date above the table and its method and revision with that + site's evidence. The baseline `scope` is also rendered, clearly labeled. + Leave top-level `checked_on`, other sites' entries and census pins unchanged; + no per-site fields means the baseline date and method still apply. A partial + feature spot-check cannot redate the entire row. An entry without a published + site cannot carry a website recheck. Adding these optional fields is a + provenance assertion, not an automatic browser test or approval of a feature. - `audit_notes.json` — hand-checked explanations of each source and its counted entities. PathwayMech records and DUFMech seed families use the same pinned census, statistics and site-audit pipeline as the other ten Mechs. @@ -31,12 +42,16 @@ ## Membership and capability updates -The site currently lists twelve Mechs. CLAW's manifest lists eleven, including -PathwayMech; DUFMech is listed separately without a manifest membership declaration. The -October 5 vocabulary census, shared-term assets and repository statistics cover -all twelve Mechs. DUFMech's contribution is a measured seed worklist, labeled -as families rather than curated mechanism records. Its capability row reports -undeclared values without inventing CLAW membership. +The site lists twelve Mechs. Membership counts, badges and prose about +undeclared projects come from `data/manifest.json`; suite coverage does not +imply CLAW admission. A project's capability row remains undeclared until the +snapshot contains its declaration. Tests exercise both an eleven-member +fixture without DUFMech and a twelve-member fixture with synthetic DUFMech +declarations, independently of the current snapshot. The October 5 vocabulary +census, shared-term assets and repository statistics cover all twelve Mechs. +DUFMech's contribution to that census is a measured seed worklist, labeled as +families rather than curated mechanism records. Its schema-documentation prose +uses the website feature verdict, not membership or an inferred schema absence. Use a CLAW checkout at the desired published `main` revision. The refresh reads committed Git blobs at that checkout's HEAD; uncommitted changes are excluded. @@ -396,9 +411,9 @@ status. A Mech without that field still receives its merged-PR count and pinned provenance, rather than an invented zero reviewed count. All twelve repositories participate in statistics collection. -CLAW's ad3862e snapshot declares eleven members and enables PathwayMech's KGX and -SSSOM exporters. DUFMech remains outside that upstream manifest; its capability -row is explicitly undeclared. The capability table preserves CLAW's full +CLAW's ad3862e snapshot at this refresh declared eleven members and enabled +PathwayMech's KGX and SSSOM exporters. DUFMech was outside that upstream manifest; +its capability row was explicitly undeclared. The capability table preserves CLAW's full catalogue and recorded reasons. Capability adoption does not establish that all CLAW workflows execute unattended. diff --git a/_fleet/mechs_template.md b/_fleet/mechs_template.md index 0d7fdff..1884363 100644 --- a/_fleet/mechs_template.md +++ b/_fleet/mechs_template.md @@ -134,7 +134,7 @@ Alongside record browsing, the Mechs publish complementary ways to explore their ### Website features {: .fleet-section-target} -The capability table further down lists the shared contracts each Mech declares to CLAW. This table shows what a reader can do on each Mech's own website: features across the published sites, tested on the live sites on in a headless browser. The tests searched for known identifiers and labels, applied filters, carried a theme choice from page to page, measured pages at a 390-pixel width and made data requests fail on purpose. Each verdict was tested by one AI agent, re-tested independently by a second and settled by a third where the two disagreed; a final pass compared each column across the sites against written criteria, which are listed with the evidence below the table. A feature counts as present only if it met its criteria, so a search that lists only its first 20 matches, or cannot find record identifiers, counts as partial. Some features do not apply to every site: a page that embeds its data makes no data request that could fail, a page with no search or filters has no search to link to, and DUFMech's worklist has no schema to document. Hover a marker for its evidence, or open the list below the table. A gap marks a possible improvement to a website, not a problem with the Mech's records. The notes describe each site as it stood when it was checked that day, after the cards above were counted, so a site that has grown since then quotes larger figures here, and a later redeployment can change a verdict. +The capability table further down lists the shared contracts each Mech declares to CLAW. This table shows what a reader can do on each Mech's own website: features across the published sites, with a baseline audit dated . The audit methods, feature criteria and evidence are listed below the table. A feature counts as present only if it met its criteria, so a search that lists only its first 20 matches, or cannot find record identifiers, counts as partial. Some features do not apply to every site: a page that embeds its data makes no data request that could fail, and a page with no search or filters has no search to link to. Hover a marker for its evidence, or open the list below the table. A gap marks a possible improvement to a website, not a problem with the Mech's records. The notes describe each site at its audit date, independently of the card and census pins; a later redeployment can change a verdict.
@@ -199,14 +199,14 @@ Beyond shared vocabulary, Mechs name one another directly, in record fields, in [culturebotai-claw](https://github.com/CultureBotAI/culturebotai-claw) is the fleet's coordinator. It does not hold science of its own; it holds the definition of the fleet, the artifacts every Mech must share byte-for-byte, and tooling for cross-repository curation and validation.
-

Fleet manifest

fleet.yaml is the single source of truth for which repositories form the fleet. The manifest declares of the projects shown here, including PathwayMech. DUFMech is listed here and is not yet declared in the manifest. Every member declares every capability exactly once as enabled, disabled or not applicable, and every disabled or not-applicable entry gives a reason, so nothing is silently off.

+

Fleet manifest

fleet.yaml is the single source of truth for which repositories form the fleet. The manifest declares of the projects shown here. Every member declares every capability exactly once as enabled, disabled or not applicable, and every disabled or not-applicable entry gives a reason, so nothing is silently off.

Vendored governance

Shared LinkML modules (mech_shared.yaml, history.yaml), validators and behavioral contracts live in claw and are vendored into its declared members byte-identically, pinned to one immutable claw commit and checked in CI. The canonical registry defines artifacts, with each member receiving the contracts that apply to it.

Pipelines and skills

CLAW provides pipeline discovery, repository checks, shared curation tools and validated dry runs. Agent and pipeline execution through openclaw-cli is not implemented; environment-curation and unified ingredient-mapping apply modes are disabled pending transactional writers. Deep-research tooling supports provider triage and dry-run result capture; provider execution is not implemented.

The current support matrix distinguishes supported tools from planned execution. The autonomous knowledge factory label describes each Mech's curation model with human oversight; it does not imply that every CLAW workflow runs unattended. -Capability declarations from CLAW record adoption of shared contracts; they do not certify complete validation of every record field or that every failed check blocks a merge. Every disabled entry records a reason, such as no download.yaml or no source queue yet. DUFMech is included with undeclared capabilities because it is not yet a manifest member: +Capability declarations from CLAW record adoption of shared contracts; they do not certify complete validation of every record field or that every failed check blocks a merge. Every disabled entry records a reason, such as no download.yaml or no source queue yet. Projects absent from that snapshot are shown as undeclared, not disabled:
@@ -221,7 +221,7 @@ Capability declarations from CLAW record adoption of shared contracts; they do n ## What makes a Mech {: .fleet-section-target} -The established Mechs share curation conventions, with adoption recorded per capability in the table above. DUFMech currently provides a seed worklist; the record and schema conventions below describe the structured corpora. The fleet standard is documented in [CLAW's MECH_STANDARD.md](https://github.com/CultureBotAI/culturebotai-claw/blob/main/docs/guides/MECH_STANDARD.md): +The Mechs share curation conventions, with adoption recorded per capability in the table above. The record and schema conventions below describe structured corpora; DUFMech's numeric card counts seed families rather than curated mechanism records. The fleet standard is documented in [CLAW's MECH_STANDARD.md](https://github.com/CultureBotAI/culturebotai-claw/blob/main/docs/guides/MECH_STANDARD.md): ## Related resources diff --git a/mechs.md b/mechs.md index 4127238..10c3b18 100644 --- a/mechs.md +++ b/mechs.md @@ -1283,7 +1283,7 @@ Alongside record browsing, the Mechs publish complementary ways to explore their ### Website features {: .fleet-section-target} -The capability table further down lists the shared contracts each Mech declares to CLAW. This table shows what a reader can do on each Mech's own website: 24 features across the twelve published sites, tested on the live sites on October 5, 2026 in a headless browser. The tests searched for known identifiers and labels, applied filters, carried a theme choice from page to page, measured pages at a 390-pixel width and made data requests fail on purpose. Each verdict was tested by one AI agent, re-tested independently by a second and settled by a third where the two disagreed; a final pass compared each column across the sites against written criteria, which are listed with the evidence below the table. A feature counts as present only if it met its criteria, so a search that lists only its first 20 matches, or cannot find record identifiers, counts as partial. Some features do not apply to every site: a page that embeds its data makes no data request that could fail, a page with no search or filters has no search to link to, and DUFMech's worklist has no schema to document. Hover a marker for its evidence, or open the list below the table. A gap marks a possible improvement to a website, not a problem with the Mech's records. The notes describe each site as it stood when it was checked that day, after the cards above were counted, so a site that has grown since then quotes larger figures here, and a later redeployment can change a verdict. +The capability table further down lists the shared contracts each Mech declares to CLAW. This table shows what a reader can do on each Mech's own website: 24 features across the twelve published sites, with a baseline audit dated October 5, 2026. The audit methods, feature criteria and evidence are listed below the table. A feature counts as present only if it met its criteria, so a search that lists only its first 20 matches, or cannot find record identifiers, counts as partial. Some features do not apply to every site: a page that embeds its data makes no data request that could fail, and a page with no search or filters has no search to link to. Hover a marker for its evidence, or open the list below the table. A gap marks a possible improvement to a website, not a problem with the Mech's records. The notes describe each site at its audit date, independently of the card and census pins; a later redeployment can change a verdict.
@@ -1310,6 +1310,7 @@ The capability table further down lists the shared contracts each Mech declares
presentpartial, as its note explainsmissingdoes not apply to this site
Feature criteria and the evidence for each verdict +

Baseline audit

Each Mech's live GitHub Pages site as it stood when checked on 2026-10-05, not the repository pins used by the census. Every verdict was tested in headless Chrome by one agent (real identifier and label searches, filters, URL state, theme persistence across pages, 390 px overflow, data requests aborted on purpose), re-tested independently by a skeptic, settled by an arbiter where the two disagreed, and compared column by column across all twelve sites against each feature's criteria in the catalogue. deployed_revision is the github-pages deployment the final check of that site saw; several sites redeployed during the day, so later deployments may differ.

Features

Search
A labeled text search over the whole published corpus, tested with a known identifier and a known label. Present: it finds records by identifier and by label, shows how many match, and every match can be opened. Partial: results are capped with no route to the rest, no match count is shown, identifiers are not searchable, or search works only within one category.
Filters
Filter controls on record properties, with a way to clear them. Present: at least one filter on a record property in the main record listing, with a reset. Partial: filters only on a map or plot page, or a single selector without a reset. A free-text box is a search, not a filter.
Result counts
A count of matching records that updates with search and filters, distinct from the total. Partial: only a static total.
Sorting
The reader can change the sort order of a listing. Present: a sort control or sortable column headings.
Linkable search
Search and filter state is kept in the URL, so a filtered view can be bookmarked and restores on load. Partial: some state, such as a facet or a selected record, restores from the URL but the main search does not. Does not apply: the site has no search or filters.
Complete catalog
Every record the site counts is reachable from it, by listing, pagination, shards or lazy loading. Partial: some records the site counts cannot be reached from its pages.
Record pages
Each record has its own stable, linkable URL.
Term links
Ontology terms show a readable label beside the CURIE, and the CURIE links to a resolver. Present: the record's own grounding and the terms in its main sections are labeled and linked; a few minor prefixes may be plain text. Partial: a whole main section of terms is unlinked, unlabeled or broken, or the record's own identifier does not resolve for many records.
Evidence links
References (PMID, DOI or URL) shown on record pages are linked. Partial: references are plain text, or only a minority of the records that cite something link it.
Curation status
Each record shows its curation or review status.
Curation history
The record view shows its curation events: what changed, when and by whom.
Source link
The record view links to the record's own source file in the GitHub repository. Partial: the file is named as plain text, or only the repository root is linked.
Domain visual
A view suited to the domain, such as a structure or embedding map, a pathway or causal diagram, an interaction network or a lineage. Partial: the visual exists but is broken for readers.
Cross-Mech links
Record views link to specific records in sibling Mechs or in kg-microbe. Partial: related records are named as plain text, or the links are broken.
Corpus statistics
The landing page shows generated corpus counts.
Category browsing
Category or class pages lead into subsets of the corpus. Partial: categories are reachable only as a filter, or their index is not linked from the landing page.
Suite link
A visible link to the X-Mech Suite directory at culturebotai.github.io/mechs/.
Downloads
A bulk machine-readable export of all records is linked from the site. Partial: only the repository, per-record files, partial exports, or a bulk file that no page links. Missing: no data or repository link at all.
Schema docs
LinkML schema documentation is published on or linked from the site. Partial: the site says a schema exists but links only the repository root, or a documentation page exists that nothing links. Does not apply: there is no schema.
License
The site states the data and code licenses, consistent with the repository's license files. Partial: stated on only some pages, or inconsistent with the repository.
Build or version
The site states when it was built, which commit it shows, or a dated version of its own records. Partial: only the dates or releases of upstream sources.
Theme toggle
A light and dark toggle whose choice carries across pages. Partial: follows the operating system's setting without a toggle, or some linked pages ignore the choice.
Narrow screens
No horizontal page overflow at 390 pixels on pages linked from the main navigation, the browse page or record pages; wide tables scroll in their own region. Partial: some of those pages overflow.
Load errors
When a data request fails, the page shows an error rather than an empty or misleading result. Partial: some failures are silent or misleading. Does not apply: the pages fetch no data.

HabitatMech

  • Search partial: The text map's Find a record box searches all 3206 records by label and identifier (ENVO:03000033: 1 match; sediment: 138) but links only the first 20, with no paging; category pages filter one category each. Evidence
  • Filters missing: No filter controls on record properties: across all 3458 pages there are no selects, buttons or chips, only free-text boxes on category pages and the text map; the 32 checkboxes enlarge causal diagrams. Evidence
  • Result counts present: Category filters report live counts against the category total (ENVO:03000033 gives 1 of 468 match), and the text map counts matches across the corpus (sediment: 138 matching records). Evidence
  • Sorting missing: Category tables are fixed in descending assertion-count order; clicking the column headers does nothing, and no page offers a sort control. Evidence
  • Linkable search missing: Typing in a category filter or the text map search leaves the URL unchanged, and loading a page with ?q= or #q= restores nothing. Evidence
  • Complete catalog present: All 3206 stated records are linked from the 16 category listing pages (up to 300 rows each) and plotted on the text map; 227 old record URLs redirect to current pages and 4 split IDs list their successors. Evidence
  • Record pages present: Each habitat has a static page whose path carries its identifier, e.g. marine-sediment-envo-03000033.html; retired identifiers keep pages that forward to, or list, their successors. Evidence
  • Term links partial: The grounding CURIE has a resolve link to its OBO PURL and Related terms link with labels, but all 12,218 associated-taxon rows on 886 records are unlinked NCBITaxon CURIEs, 506 with no label. Evidence
  • Evidence links partial: PMIDs, DOIs and URLs appear as plain text on 39 records, in causal-graph edge tables (32) and curation notes, and none is linked; marine sediment cites PMID:31388058 unlinked. Evidence
  • Curation status present: Every record header shows SEEDED or REVIEWED (2520 and 686, matching the landing), and all 2520 seeded records carry a machine-generated, unreviewed warning. Evidence
  • Curation history present: 1552 records, including all 686 reviewed ones, list curator decisions with action, date, curator and rationale (marine sediment: ADD_CAUSAL_GRAPH, 2026-09-04, codex); the other 1654 were only seeded, as Provenance says. Evidence
  • Source link present: Every record's Provenance section links its YAML on GitHub main, e.g. data/habitats/aquatic/marine_sediment.yaml (returns 200); all 3206 linked paths exist at the deployed commit. Evidence
  • Domain visual present: Interactive SVG causal graphs with focusable nodes and edges on 32 records (marine sediment: 14 nodes, 14 edges, full-size toggle), plus a clickable PaCMAP text-embedding map of all 3206 records. Evidence
  • Cross-Mech links missing: No record links a specific sibling Mech or kg-microbe record: taxa are unlinked NCBITaxon CURIEs, and kg-microbe appears only as a cited source table and a footer repository link. Evidence
  • Corpus statistics present: The landing shows 3206 records, 2151 grounded, 176 corroborated by 2+ sources and 686 reviewed, plus category, grounding and coverage tables; the counts match the record pages. Evidence
  • Category browsing present: Browse lists eight categories with record and grounded counts, and the landing repeats them with record counts; each opens a category listing (16 pages in all, up to 300 rows each) with its own filter box. Evidence
  • Suite link present: The header on every page links All Mech projects to https://culturebotai.github.io/mechs/ (returns 200); only the text map page, which has no header, lacks it. Evidence
  • Downloads partial: No bulk export is linked: the Source link opens the GitHub repository and each record links its own YAML; the category JSON indexes and text-map points.json list every record but are unlinked. Evidence
  • Schema docs missing: No page mentions or links the LinkML schema; neither schema nor LinkML appears on any of the 3458 deployed pages, and the header links only the repository root. Evidence
  • License present: Footers state project data CC BY 4.0 and code BSD-3-Clause with third-party terms applying, matching the repository's LICENSE files; only the text map page has no footer. Evidence
  • Build or version partial: The footer's Generated from kg-microbe on 2026-08-16 is the upstream extraction date; no page shows a build date or commit, and only the text map's linked manifest gives a map build time (2026-09-18). Evidence
  • Theme toggle partial: There is no toggle; templated pages turn dark when the OS prefers dark, but the text map page stays light. Evidence
  • Narrow screens partial: Nav pages, Browse and all 16 category pages fit 390px, but 4 of 3206 record pages overflow: aquatic macrophyte-associated environment by 81px (an unbroken URL), others by 2 to 7px; 2 forwarding pages by up to 93px. Evidence
  • Load errors present: With the JSON indexes aborted, filtering a multi-page category shows filter unavailable while its unfiltered rows stay listed; single-page categories, records and the text map fetch no data. Evidence

CommunityMech

  • Search partial: Search covers names and descriptions only: ANME found 2 and Desulfovibrio vulgaris 7, but CommunityMech:000134, NCBITaxon:2157 and the member label sulfate-reducing bacterial partners found 0. Evidence
  • Filters present: Category, ecological state, metals, rare earth and metal relevance checkboxes with live counts, removable filter tags and Clear All; SYNTROPHY plus STABLE gave 20 and Clear All restored 456. Evidence
  • Result counts present: The line Showing 32 of 456 communities updates with each search or filter change. Evidence
  • Sorting missing: No sort control; cards always appear in one fixed order by file name, and the facet options are the only way to regroup them. Evidence
  • Linkable search missing: Searching or filtering never changes the URL, and browser.html?q=methane#category=SYNTROPHY still loads all 456 communities. Evidence
  • Complete catalog present: All 456 communities the landing page states are cards in browser.html, matching the 456 YAML files in the repository, and all 456 linked record pages returned 200. Evidence
  • Record pages present: Each community has a page, e.g. communities/ANME_SRB_Marine_Methane_Seep_Consortium.html, with taxonomy, interactions, environment, growth media and datasets. Evidence
  • Term links present: The 5,907 NCBITaxon, ChEBI, GO, ENVO and UBERON IDs in record sections link to resolvers beside a name; 258 taxa and 286 environments show only a curated name, not the term label. CultureMech IDs are plain text. Evidence
  • Evidence links present: All 456 record pages link evidence to PubMed or doi.org with quoted snippets and support labels; 5,843 of 5,870 evidence items are linked, the rest being GITHUB references on two pages. Evidence
  • Curation status missing: No curation or review status on record pages; badges cover ecological state, evidence support and OPEN discussions, and community records have no status field. Evidence
  • Curation history missing: None of the 456 record pages shows curation history, although 187 community YAML files carry curation_history entries, e.g. Aalborg East EBPR reviewed on 2026-10-05. Evidence
  • Source link partial: The footer link View on GitHub goes to the repository root, not to the community's YAML file under kb/communities/. Evidence
  • Domain visual present: D3 networks show taxa and edges on 307 record pages, but 141 show only unconnected interaction markers though taxa are listed; PaCMAP and force-directed maps place 322 and 292 of 456 communities, each opening its record. Evidence
  • Cross-Mech links partial: 27 View in CultureMech links on 21 record pages point to github.com/CultureBotAI/CultureMech/tree/main/kb/media/CultureMech:... paths, and all 17 distinct targets return 404. Evidence
  • Corpus statistics present: The landing page shows template-generated counts, 456 communities and 15 categories, matching the browser's 456 cards and 15 category options. Evidence
  • Category browsing partial: Categories are browsable only through the browser's Category facet; the landing 15 categories tile jumps to that facet, which is hidden behind the Filters button at 390 px. Evidence
  • Suite link present: The landing footer, the browser header and every record header link All Mech projects to culturebotai.github.io/mechs/. Evidence
  • Downloads partial: No bulk export is linked from the site; the landing page and record footers link only to the GitHub repository, which has no releases. Evidence
  • Schema docs partial: The landing page's GitHub card lists the schema among the repository contents but links only the repository root; the site publishes no LinkML schema documentation and no link to the schema file. Evidence
  • License missing: No data or code license is stated on the landing, browser, map or record pages, although the repository licenses data under CC BY 4.0 and code under BSD-3-Clause. Evidence
  • Build or version missing: Pages say only Generated by CommunityMech, with no build date, commit or data version. Evidence
  • Theme toggle present: Dark mode set on the landing page carried to the browser, record pages and both embedding maps through the shared mech-theme setting, and switching back on a record page carried to the landing page. Evidence
  • Narrow screens present: No horizontal overflow at 390 px on the landing page, browser, both maps and all 456 record pages; tables scroll in their own regions and filters move into a dialog. Evidence
  • Load errors not applicable: Landing, browser, record and map pages embed their data in the HTML and make no fetch or XHR requests; only local d3 and theme scripts load, so no data index can fail. Evidence
@@ -1372,14 +1373,14 @@ Beyond shared vocabulary, Mechs name one another directly, in record fields, in [culturebotai-claw](https://github.com/CultureBotAI/culturebotai-claw) is the fleet's coordinator. It does not hold science of its own; it holds the definition of the fleet, the artifacts every Mech must share byte-for-byte, and tooling for cross-repository curation and validation.
-

Fleet manifest

fleet.yaml is the single source of truth for which repositories form the fleet. The manifest declares eleven of the twelve projects shown here, including PathwayMech. DUFMech is listed here and is not yet declared in the manifest. Every member declares every capability exactly once as enabled, disabled or not applicable, and every disabled or not-applicable entry gives a reason, so nothing is silently off.

+

Fleet manifest

fleet.yaml is the single source of truth for which repositories form the fleet. The manifest declares eleven of the twelve projects shown here. Separately listed projects without a declaration: DUFMech. Every member declares every capability exactly once as enabled, disabled or not applicable, and every disabled or not-applicable entry gives a reason, so nothing is silently off.

Vendored governance

Shared LinkML modules (mech_shared.yaml, history.yaml), validators and behavioral contracts live in claw and are vendored into its declared members byte-identically, pinned to one immutable claw commit and checked in CI. The canonical registry defines 20 artifacts, with each member receiving the contracts that apply to it.

Pipelines and skills

CLAW provides pipeline discovery, repository checks, shared curation tools and validated dry runs. Agent and pipeline execution through openclaw-cli is not implemented; environment-curation and unified ingredient-mapping apply modes are disabled pending transactional writers. Deep-research tooling supports provider triage and dry-run result capture; provider execution is not implemented.

The current support matrix distinguishes supported tools from planned execution. The autonomous knowledge factory label describes each Mech's curation model with human oversight; it does not imply that every CLAW workflow runs unattended. -Capability declarations from CLAW record adoption of shared contracts; they do not certify complete validation of every record field or that every failed check blocks a merge. Every disabled entry records a reason, such as no download.yaml or no source queue yet. DUFMech is included with undeclared capabilities because it is not yet a manifest member: +Capability declarations from CLAW record adoption of shared contracts; they do not certify complete validation of every record field or that every failed check blocks a merge. Every disabled entry records a reason, such as no download.yaml or no source queue yet. Projects absent from that snapshot are shown as undeclared, not disabled:
@@ -1405,7 +1406,7 @@ Capability declarations from CLAW record adoption of shared contracts; they do n ## What makes a Mech {: .fleet-section-target} -The established Mechs share curation conventions, with adoption recorded per capability in the table above. DUFMech currently provides a seed worklist; the record and schema conventions below describe the structured corpora. The fleet standard is documented in [CLAW's MECH_STANDARD.md](https://github.com/CultureBotAI/culturebotai-claw/blob/main/docs/guides/MECH_STANDARD.md): +The Mechs share curation conventions, with adoption recorded per capability in the table above. The record and schema conventions below describe structured corpora; DUFMech's numeric card counts seed families rather than curated mechanism records. The website audit records DUFMech's schema documentation as not applicable. The fleet standard is documented in [CLAW's MECH_STANDARD.md](https://github.com/CultureBotAI/culturebotai-claw/blob/main/docs/guides/MECH_STANDARD.md): ## Related resources diff --git a/scripts/fleet/assemble_page.py b/scripts/fleet/assemble_page.py index 6cc4147..d762d61 100644 --- a/scripts/fleet/assemble_page.py +++ b/scripts/fleet/assemble_page.py @@ -86,6 +86,18 @@ def _text(value): return value.strip() if isinstance(value, str) and value.strip() else None +def _audit_date(value, label): + if not isinstance(value, str): + raise ValueError(f"{label}: checked_on must be an ISO date") + try: + day = datetime.date.fromisoformat(value) + except ValueError: + raise ValueError(f"{label}: checked_on must be an ISO date") from None + if day.isoformat() != value: + raise ValueError(f"{label}: checked_on must be YYYY-MM-DD") + return day + + def site_feature_columns(features): """(group title, feature key) pairs in display order. Every catalogue feature sits in exactly one group, so no column can go unshown.""" @@ -98,7 +110,7 @@ def site_feature_columns(features): def validate_site_features(features, names): """Fail closed: every suite Mech has a row, every row judges every feature.""" - datetime.date.fromisoformat(features["checked_on"]) + baseline = _audit_date(features.get("checked_on"), "Site features") if not _text(features.get("scope")): raise ValueError("Site features need a scope saying what was checked and how") columns = site_feature_columns(features) @@ -110,6 +122,14 @@ def validate_site_features(features, names): if set(features["mechs"]) != set(names): raise ValueError("Site features must cover every suite Mech exactly once") for name, mech in features["mechs"].items(): + if "checked_on" in mech or "scope" in mech: + checked = _audit_date(mech.get("checked_on"), name) + if checked < baseline: + raise ValueError(f"{name}: site-specific check cannot predate the baseline audit") + if not _text(mech.get("scope")): + raise ValueError(f"{name}: site-specific check needs its own scope") + if mech.get("site") is None: + raise ValueError(f"{name}: site-specific check needs a published site") if mech.get("site") is None: # A Mech without a website gets one explanatory cell, not a row of # markers that would read as twenty-four separate judgements. @@ -221,7 +241,8 @@ def site_feature_evidence(features, suite_order): entry = features["catalogue"][key] terms.append(f'
{escape(entry["label"])}
{escape(entry["definition"])}' + (f' {escape(entry["criteria"])}' if entry.get("criteria") else "") + "
") - parts = ["

Features

" + "".join(terms) + "
"] + parts = [f'

Baseline audit

{escape(features["scope"].strip())}

', + "

Features

" + "".join(terms) + "
"] for name in suite_order: mech = features["mechs"][name] if mech.get("site") is None: @@ -233,10 +254,39 @@ def site_feature_evidence(features, suite_order): items.append(f'
  • {escape(features["catalogue"][key]["label"])} ' f'{escape(SITE_STATUSES[verdict["status"]][1])}: ' f'{escape(verdict["note"].strip())} Evidence
  • ') - parts.append(f'

    {escape(name)}

    ') + recheck = "" + if "checked_on" in mech: + day = _audit_date(mech["checked_on"], name).strftime("%B %-d, %Y") + revision = mech["deployed_revision"] + source = f'{mech["repository"].rstrip("/")}/tree/{revision}' + recheck = (f'

    Site-specific check on {day}, ' + f'deployed revision {revision[:7]}. ' + f'{escape(mech["scope"].strip())}

    ') + parts.append(f'

    {escape(name)}

    ' + f'{recheck}') return "\n".join(parts) +def site_feature_rechecks(features, suite_order): + checks = [f'{escape(name)} ({_audit_date(features["mechs"][name]["checked_on"], name):%B %-d, %Y})' + for name in suite_order if "checked_on" in features["mechs"][name]] + if not checks: + return "" + note = "Site-specific rechecks: " + "; ".join(checks) + ". Their methods and deployed revisions are recorded below." + if len(checks) < sum(m.get("site") is not None for m in features["mechs"].values()): + note += " Other sites retain the baseline audit date and method." + return note + + +def site_schema_note(features, name): + verdict = features["mechs"][name].get("features", {}).get("schema_docs") + if verdict is None: + return f"There is no website feature verdict for {escape(name)}'s schema documentation." + status = SITE_STATUSES[verdict["status"]][1] + return (f"The website audit records {escape(name)}'s schema documentation as " + f'{escape(status)}.') + + def site_feature_key(features): """A legend for the statuses the table actually uses.""" used = {verdict["status"] for mech in features["mechs"].values() @@ -391,6 +441,10 @@ def assemble(template, fragment, data, snapshot, stats, census, features): "": str(pr_repo_count), "": str(snapshot["artifact_count"]), "": number_word(len(members)), + "": ( + "Separately listed projects without a declaration: " + + ", ".join(escape(name) for name in cards if name not in members) + "." + if names - members else "All projects shown here have a manifest declaration."), "": f'CLAW fleet manifest at {escape(source["revision"][:7])}', "": capability_rows(snapshot, cards), "": capability_head(snapshot), @@ -401,6 +455,8 @@ def assemble(template, fragment, data, snapshot, stats, census, features): "": site_feature_key(features), "": site_feature_evidence(features, cards), "": datetime.date.fromisoformat(features["checked_on"]).strftime("%B %-d, %Y"), + "": site_feature_rechecks(features, cards), + "": site_schema_note(features, "DUFMech"), "": number_word(sum(m.get("site") is not None for m in features["mechs"].values())), "": number_word(len(features["catalogue"])), } diff --git a/scripts/fleet/check_updates.py b/scripts/fleet/check_updates.py index 12ac53f..bb3f70f 100644 --- a/scripts/fleet/check_updates.py +++ b/scripts/fleet/check_updates.py @@ -384,10 +384,11 @@ def main() -> int: print(line) print(f"{len(urls) - len(dead) - len(unchecked)} of {len(urls)} distinct links resolve.") features = json.loads(FEATURES.read_text()) - print(f"\n## Website feature table (judged on the live sites on {features['checked_on']})\n") + print(f"\n## Website feature table (baseline audit: {features['checked_on']})\n") sites = site_feature_check(features) for status, mech, detail in sites: - print(f"- {status} {mech}: {detail}") + checked_on = features["mechs"][mech].get("checked_on", features["checked_on"]) + print(f"- {status} {mech} (audit date: {checked_on}): {detail}") print("\n" + summary(moved, cards, manifest, dead, unchecked, pages, sites)) return 0 diff --git a/tests/test_fleet_page.py b/tests/test_fleet_page.py index 0cbf40d..ced5ac7 100644 --- a/tests/test_fleet_page.py +++ b/tests/test_fleet_page.py @@ -144,9 +144,11 @@ def test_pr_activity_rejects_missing_duplicate_and_inconsistent_counts(self): def test_published_page_contains_both_new_members_with_distinct_capabilities(self): page = self.render() self.assertEqual(page, (ROOT / "mechs.md").read_text()) - self.assertEqual(page.count('in fleet manifest'), 11) + members = set(self.snapshot["mechs"]) + self.assertEqual(page.count('in fleet manifest'), len(members)) self.assertIn('Relationship graph of the twelve autonomous knowledge factories', page) - self.assertEqual(page.count('not yet in fleet manifest'), 1) + self.assertEqual(page.count('not yet in fleet manifest'), + len(set(card_figures(self.template)) - members)) self.assertNotIn('one revision behind', page) caps = self.snapshot['mechs'] self.assertEqual(caps['NaturalProductMech']['capabilities']['source_queue']['status'], 'enabled') diff --git a/tests/test_site_features.py b/tests/test_site_features.py index efcd440..b569dfc 100644 --- a/tests/test_site_features.py +++ b/tests/test_site_features.py @@ -203,7 +203,7 @@ def test_every_verdict_is_readable_without_hovering(self): page = self.render() notes = section(page, '
    ', "
    ") columns = site_feature_columns(self.features) - blocks = re.findall(r'

    ([^<]*)

    ', notes, re.S) + blocks = re.findall(r'

    ([^<]*)

    (?:

    .*?

    )?', notes, re.S) self.assertEqual([name for _, name, _ in blocks], self.order) for site, name, items in blocks: mech = self.features["mechs"][name] @@ -226,15 +226,107 @@ def test_feature_definitions_and_criteria_are_visible(self): def test_the_table_states_its_own_check_date(self): # #366: the table's sentence, not the card paragraph's "checked on". def sentence(day): - return f"tested on the live sites on {day:%B} {day.day}, {day.year} in a headless browser" + return f"with a baseline audit dated {day:%B} {day.day}, {day.year}" day = datetime.date.fromisoformat(self.features["checked_on"]) self.assertIn(sentence(day), self.render()) moved = deepcopy(self.features) moved["checked_on"] = "2026-11-02" + for mech in moved["mechs"].values(): + mech.pop("checked_on", None) + mech.pop("scope", None) page = self.render(moved) self.assertIn(sentence(datetime.date(2026, 11, 2)), page) self.assertNotIn(sentence(day), page) + def test_baseline_method_is_visible_without_inventing_a_recheck(self): + baseline = deepcopy(self.features) + for mech in baseline["mechs"].values(): + mech.pop("checked_on", None) + mech.pop("scope", None) + page = self.render(baseline) + self.assertIn(escape(baseline["scope"].strip()), page) + self.assertIn("

    Baseline audit

    ", page) + self.assertNotIn("Site-specific rechecks:", page) + self.assertNotIn("Site-specific check on", page) + + def test_duf_recheck_is_dated_without_redating_other_sites_or_changing_verdicts(self): + changed = deepcopy(self.features) + for mech in changed["mechs"].values(): + mech.pop("checked_on", None) + mech.pop("scope", None) + unchanged = deepcopy(changed) + later = datetime.date.fromisoformat(changed["checked_on"]) + datetime.timedelta(days=2) + day = later.strftime("%B %-d, %Y") + duf = changed["mechs"]["DUFMech"] + duf.update(checked_on=later.isoformat(), scope='DUF-only checks; no other sites rechecked.', + deployed_revision="a" * 40) + page = self.render(changed) + self.assertIn(f"Site-specific rechecks: DUFMech ({day}).", page) + self.assertIn("Other sites retain the baseline audit date and method.", page) + notes = section(page, '
    ', "
    ") + self.assertEqual(notes.count("Site-specific check on"), 1) + self.assertIn(f"Site-specific check on {day}", notes) + self.assertIn("DUF-only <browser> checks; no other sites rechecked.", notes) + self.assertIn(f'{duf["repository"]}/tree/{"a" * 40}', notes) + self.assertEqual(self.table(changed), self.table(unchanged)) + self.assertEqual(changed["checked_on"], unchanged["checked_on"]) + for name, mech in unchanged["mechs"].items(): + if name != "DUFMech": + self.assertEqual(changed["mechs"][name], mech) + + def test_per_site_check_requires_valid_date_scope_and_deployment(self): + for value in (None, "", "2026-02-30", "20261007", 20261007, ["2026-10-07"]): + with self.subTest(date=value): + changed = deepcopy(self.features) + changed["mechs"]["DUFMech"].update(checked_on=value, scope="Test scope") + with self.assertRaisesRegex(ValueError, "checked_on"): + validate_site_features(changed, self.names) + for scope in (None, "", " ", 17, ["Test scope"]): + with self.subTest(scope=scope): + changed = deepcopy(self.features) + changed["mechs"]["DUFMech"].update(checked_on=changed["checked_on"], scope=scope) + with self.assertRaisesRegex(ValueError, "own scope"): + validate_site_features(changed, self.names) + changed = deepcopy(self.features) + duf = changed["mechs"]["DUFMech"] + duf.update(scope="Scope without a date") + duf.pop("checked_on", None) + with self.assertRaisesRegex(ValueError, "checked_on"): + validate_site_features(changed, self.names) + earlier = datetime.date.fromisoformat(changed["checked_on"]) - datetime.timedelta(days=1) + duf["checked_on"] = earlier.isoformat() + with self.assertRaisesRegex(ValueError, "predate"): + validate_site_features(changed, self.names) + duf["checked_on"] = changed["checked_on"] + duf.pop("deployed_revision") + with self.assertRaisesRegex(ValueError, "deployed_revision"): + validate_site_features(changed, self.names) + changed = self.without_site() + changed["mechs"]["DUFMech"].update(checked_on=changed["checked_on"], scope="No website") + with self.assertRaisesRegex(ValueError, "published site"): + validate_site_features(changed, self.names) + + def test_baseline_dates_are_canonical_iso_strings(self): + for value in (None, "", "2026-02-30", "20261005", 20261005): + with self.subTest(date=value): + changed = deepcopy(self.features) + changed["checked_on"] = value + with self.assertRaisesRegex(ValueError, "checked_on"): + validate_site_features(changed, self.names) + + def test_duf_schema_prose_uses_the_website_verdict_not_membership(self): + for status, (_, label) in SITE_STATUSES.items(): + with self.subTest(status=status): + changed = deepcopy(self.features) + changed["mechs"]["DUFMech"]["features"]["schema_docs"].update( + status=status, url="https://example.org/duf/schema", note="Synthetic schema verdict.") + page = self.render(changed) + self.assertIn("The website audit records DUFMech's schema documentation as " + f'{label}.', page) + self.assertNotIn("DUFMech's worklist has no schema", page) + self.assertIn("There is no website feature verdict for DUFMech's schema documentation.", + self.render(self.without_site())) + if __name__ == "__main__": unittest.main() diff --git a/tests/test_suite_integration.py b/tests/test_suite_integration.py index a99d0d6..a1e2ba7 100644 --- a/tests/test_suite_integration.py +++ b/tests/test_suite_integration.py @@ -8,7 +8,7 @@ ROOT = Path(__file__).resolve().parents[1] sys.path.insert(0, str(ROOT / "scripts/fleet")) -from assemble_page import assemble, capability_rows +from assemble_page import assemble, capability_rows, number_word from card_markup import card_figures import check_cards import roots @@ -33,14 +33,57 @@ def test_seed_families_are_measured_without_inventing_claw_admission(self): self.assertIn(f"{sum(figures.values()):,}", page) self.assertIn("records and seed families", page) self.assertIn("all twelve Mechs", page) + members = set(self.inputs[1]["mechs"]) + self.assertEqual(page.count('in fleet manifest'), len(members)) + self.assertEqual(page.count('not yet in fleet manifest'), + len(set(figures) - members)) + self.assertIn(f"The manifest declares {number_word(len(members))} of the twelve projects", page) + + def test_undeclared_duf_fixture_retains_a_seed_card_and_unknown_capabilities(self): + self.inputs[1]["mechs"].pop("DUFMech", None) + page = self.render() self.assertIn('not yet in fleet manifest', page) - self.assertNotIn("DUFMech", self.inputs[1]["mechs"]) + self.assertIn("Separately listed projects without a declaration: DUFMech.", page) rows = capability_rows(self.inputs[1], ["DUFMech"]) self.assertEqual(rows.count('class="u"'), len(self.inputs[1]["capability_catalogue"])) self.assertIn("not declared in CLAW manifest", rows) self.assertNotIn('class="d"', rows) self.assertNotIn('class="n"', rows) + def test_twelve_member_fixture_declares_duf_without_upgrading_website_verdicts(self): + # Synthetic declarations exercise admission, not a claim about CLAW main. + snapshot = self.inputs[1] + snapshot["mechs"]["DUFMech"] = { + "key": "dufmech", "github": "CultureBotAI/DUFMech", + "capabilities": { + key: {"status": "disabled", "reason": "Synthetic admission fixture."} + for key in snapshot["capability_catalogue"] + }, + } + snapshot["mechs"]["DUFMech"]["capabilities"]["strict_validation"] = {"status": "enabled"} + feature_data = json.dumps(self.inputs[4], sort_keys=True) + page = self.render() + self.assertEqual(page.count('in fleet manifest'), 12) + self.assertNotIn('not yet in fleet manifest', page) + self.assertIn("The manifest declares twelve of the twelve projects", page) + self.assertIn("All projects shown here have a manifest declaration.", page) + self.assertNotIn("Separately listed projects without a declaration:", page) + rows = capability_rows(snapshot, ["DUFMech"]) + self.assertNotIn('class="u"', rows) + self.assertIn('class="e"', rows) + self.assertIn('class="d"', rows) + self.assertEqual(json.dumps(self.inputs[4], sort_keys=True), feature_data) + self.assertEqual("Site-specific rechecks:" in page, + any("checked_on" in row for row in self.inputs[4]["mechs"].values())) + self.assertNotIn("DUFMech's worklist has no schema", page) + + def test_absent_stub_never_becomes_a_disabled_declaration(self): + snapshot = {"mechs": {}, "capability_catalogue": {"testing": {}, "schema_sync": {}}} + rows = capability_rows(snapshot, ["UndeclaredStubMech"]) + self.assertEqual(rows.count('class="u"'), 2) + self.assertIn("UndeclaredStubMech", rows) + self.assertNotIn('class="d"', rows) + def test_a_missing_new_mech_stat_cannot_be_silently_omitted(self): for name in ("PathwayMech", "DUFMech"): original = self.inputs[2]["mechs"] diff --git a/tests/test_suite_updates.py b/tests/test_suite_updates.py index 22b8c11..13cabae 100644 --- a/tests/test_suite_updates.py +++ b/tests/test_suite_updates.py @@ -95,6 +95,57 @@ def api(path): self.assertIn("site deployment CMech", line) self.assertNotIn("AMech", line) + def feature_check_output(self, *, duf_recheck=False): + features = {"checked_on": "2026-10-05", "scope": "Baseline browser audit.", "mechs": { + "TraitMech": {"site": "https://example.org/trait/", + "repository": "https://github.com/CultureBotAI/TraitMech", + "deployed_revision": "a" * 40}, + "DUFMech": {"site": "https://example.org/duf/", + "repository": "https://github.com/CultureBotAI/DUFMech", + "deployed_revision": "b" * 40}, + }} + if duf_recheck: + features["mechs"]["DUFMech"].update(checked_on="2026-10-07", scope="DUF-only browser audit.") + + def api(path): + if "/statuses?" in path: + return [{"state": "success"}] + sha = "a" * 40 if "TraitMech" in path else "c" * 40 + return [{"id": 1, "sha": sha, "created_at": "2026-10-07T09:00:00Z"}] + + drift = check_updates.drift + site_check = check_updates.site_feature_check + output = io.StringIO() + with (mock.patch.object(check_updates, "FEATURES") as source, + mock.patch.object(check_updates, "drift", side_effect=lambda entry, mech, watched: + drift(entry, mech, watched, api=lambda _: {"ahead_by": 0, "files": []})), + mock.patch.object(check_updates, "pages_check", return_value=("current", "current")), + mock.patch.object(check_updates, "manifest_check", return_value="matches"), + mock.patch.object(check_updates, "dead_links", return_value=([], [])), + mock.patch.object(check_updates.check_cards, "check", return_value=[]), + mock.patch.object(check_updates, "site_feature_check", side_effect=lambda f: site_check(f, api=api)), + contextlib.redirect_stdout(output)): + source.read_text.return_value = json.dumps(features) + self.assertEqual(check_updates.main(), 0) + return output.getvalue() + + def test_feature_check_labels_baseline_and_inherited_row_dates(self): + output = self.feature_check_output() + self.assertIn("## Website feature table (baseline audit: 2026-10-05)", output) + self.assertIn("- same TraitMech (audit date: 2026-10-05): still serves aaaaaaa", output) + self.assertIn("- redeployed DUFMech (audit date: 2026-10-05): bbbbbbb when checked, now ccccccc", output) + self.assertNotIn("judged on the live sites on", output) + + def test_feature_check_preserves_mixed_duf_recheck_and_baseline_dates(self): + output = self.feature_check_output(duf_recheck=True) + self.assertIn("## Website feature table (baseline audit: 2026-10-05)", output) + self.assertIn("- same TraitMech (audit date: 2026-10-05): still serves aaaaaaa", output) + self.assertIn("- redeployed DUFMech (audit date: 2026-10-07): bbbbbbb when checked, now ccccccc", output) + self.assertNotIn("DUFMech (audit date: 2026-10-05)", output) + self.assertNotIn("TraitMech (audit date: 2026-10-07)", output) + self.assertIn("website feature verdicts to re-check on redeployed sites: DUFMech", output) + self.assertNotIn("judged on the live sites on", output) + def test_unsuccessful_deployment_requests_are_not_claimed_as_served(self): features = {"mechs": {"AMech": { "site": "https://example.org/a/", "repository": "https://github.com/CultureBotAI/AMech", From d1221132d3e82fa9bb4d1e64cc1f4e0d866f6949 Mon Sep 17 00:00:00 2001 From: "marcin p. joachimiak" <4625870+realmarcin@users.noreply.github.com> Date: Wed, 7 Oct 2026 13:58:05 -0700 Subject: [PATCH 2/2] Publish DUF fleet adoption and deployed website evidence --- _fleet/audit_notes.json | 2 +- _fleet/data/manifest.json | 187 ++++++++++++++++++++++++++++++++- _fleet/data/site_audit.json | 8 +- _fleet/data/site_features.json | 116 ++++++++++---------- mechs.md | 22 ++-- 5 files changed, 260 insertions(+), 75 deletions(-) diff --git a/_fleet/audit_notes.json b/_fleet/audit_notes.json index 68cad10..2248602 100644 --- a/_fleet/audit_notes.json +++ b/_fleet/audit_notes.json @@ -13,6 +13,6 @@ "TraitMech": "1,005 data/traits records at the pin, equal to the landing tile: 427 REVIEWED, 490 PROPOSED, 50 DEPRECATED and 38 SEEDED. The README and corpus contain 718 records with causal graphs. The page shows 10 populated categories and 47.5% embedded (477 of 1,005).", "PathwayMech": "152 data/pathways records at the pin and 152 links in the published record browser. They contain 4,690 mechanistic edges and 15 taxa. Published record pages now display labeled edges, evidence quotes and linked references. Current committed outputs include KGX nodes/edges and SSSOM source mappings. The optional curation_history schema retains its explicit TaxonMech CurationEvent reference; no record currently populates it. PathwayMech is measured by the common census, subset and statistics pipeline.", "DUFMech": "6,532 seed families in data/worklists/interpro-pfam-duf-2026-10-01.json, validated against its frozen manifest: 4,533 UNKNOWN_CANDIDATE and 1,999 KNOWN_HISTORICAL_DUF. Each JSON row is one measured family; the TSV is a redundant serialization. Counts, heatmap occurrences and shared-term links measure this seed worklist without claiming curated mechanism records. Pfam and InterPro accessions are structured family identifiers. The repository includes a generated dashboard with all 6,532 families marked UNSCORED, but the checked public Pages URLs return 404. CLAW membership remains undeclared.", - "culturebotai-claw": "The ad3862e snapshot declares 11 canonical fleet members, including PathwayMech, 20 governed artifacts and 26 capabilities per member. PathwayMech KGX and SSSOM export contracts are enabled. DUFMech is included in the website census and statistics but remains undeclared in the upstream manifest; its capability row must not invent adoption states." + "culturebotai-claw": "The published 73958ed snapshot declares 12 canonical fleet members, including DUFMech, 20 governed artifacts and 26 capabilities per member. This manifest-only refresh retains the October 5 Mech census, card and statistics pins; the 24 website-feature criteria are a separate evidence surface. DUFMech has 20 enabled, 3 disabled and 3 not_applicable canonical declarations, with reasons and settings preserved verbatim. Its enabled offline adapters include genuine OAK correspondence to frozen Pfam labels, retained-abstract knowledge-gap proposals and KGX/SSSOM exports. Knowledge-gap scheduled execution remains false; provider-backed deep research, METPO proposals and causal-graph coverage remain disabled. This governance-pin update does not claim scientific characterization, live source freshness or a full data refresh." } } diff --git a/_fleet/data/manifest.json b/_fleet/data/manifest.json index 7874b90..cb4fb9e 100644 --- a/_fleet/data/manifest.json +++ b/_fleet/data/manifest.json @@ -2,8 +2,8 @@ "version": 1, "source": { "repository": "CultureBotAI/culturebotai-claw", - "revision": "ad3862e7a5bd771f94c320bde5fd364d3460884d", - "url": "https://github.com/CultureBotAI/culturebotai-claw/blob/ad3862e7a5bd771f94c320bde5fd364d3460884d/src/kg_microbe_fleet/fleet.yaml" + "revision": "73958edb97994bc16c5404443956ee64c47bfe9b", + "url": "https://github.com/CultureBotAI/culturebotai-claw/blob/73958edb97994bc16c5404443956ee64c47bfe9b/src/kg_microbe_fleet/fleet.yaml" }, "capability_catalogue": { "id_label_validation": {}, @@ -28,6 +28,9 @@ }, "knowledge_gap_scan": { "settings": { + "scheduled": { + "type": "boolean" + }, "window": { "type": "integer", "required_when_enabled": true, @@ -2014,6 +2017,186 @@ "reason": "Every record is one causal graph: CURIE nodes in the record-level taxa, participants and reactions lists plus the record itself, and one record-level mechanistic_edges list. That is neither graph_list nor node_nested_edges, so the coverage reader would report no record covered. Enable once the reader has a record-level shape." } } + }, + "DUFMech": { + "key": "dufmech", + "github": "CultureBotAI/DUFMech", + "capabilities": { + "id_label_validation": { + "status": "enabled", + "reason": "conf/id_label_targets.yaml uses genuine OAK against a verified frozen Pfam reference, captured independently from family record labels by src/dufmech/id_labels.py. This checks retained-source correspondence, not live ontology freshness or scientific characterization.", + "reason_claims": { + "present": [ + "conf/id_label_targets.yaml", + "src/dufmech/id_labels.py" + ] + } + }, + "curation_history": { + "status": "enabled" + }, + "strict_validation": { + "status": "enabled" + }, + "schema_sync": { + "status": "enabled" + }, + "release_management": { + "status": "enabled" + }, + "build_coordination": { + "status": "enabled" + }, + "documentation": { + "status": "enabled" + }, + "testing": { + "status": "enabled" + }, + "refactoring": { + "status": "enabled" + }, + "coordination_hooks": { + "status": "enabled" + }, + "deep_research": { + "status": "disabled", + "reason": "conf/deep_research_provider.yaml and src/dufmech/research.py support offline planning and retained simulated results only. Provider execution is refused; enable after reviewed provider-backed adoption.", + "reason_claims": { + "present": [ + "conf/deep_research_provider.yaml", + "src/dufmech/research.py" + ] + } + }, + "edison_key_discovery": { + "status": "not_applicable", + "reason": "DUFMech has no Edison research-provider integration." + }, + "environment_coverage": { + "status": "not_applicable", + "reason": "DUF/Pfam family evidence is not a culture-media, ingredient or microbial-community environment inventory." + }, + "knowledge_gap_scan": { + "status": "enabled", + "reason": "conf/kgscan_config.yaml and src/dufmech/knowledge_gaps.py use shared sentence scoring over retained abstracts and emit timestamped review packets. Explicit digest-bound review is required before native overlay acceptance. This offline adapter is not a live scheduled scan.", + "reason_claims": { + "present": [ + "conf/kgscan_config.yaml", + "src/dufmech/knowledge_gaps.py" + ] + }, + "settings": { + "window": 25, + "scheduled": false + } + }, + "vendored_sync": { + "status": "enabled" + }, + "corpus_statistics": { + "status": "enabled", + "settings": { + "fields": [ + "id", + "name", + "seed_status", + "characterization_status", + "curation_status", + "provenance" + ] + } + }, + "page_budgets": { + "status": "enabled", + "settings": { + "site_path": "pages", + "budgets_path": "conf/pages_budgets.json" + } + }, + "kgx_export": { + "status": "enabled", + "settings": { + "nodes_path": "exports/kgx/nodes.tsv", + "edges_path": "exports/kgx/edges.tsv" + } + }, + "writer_audit": { + "status": "enabled", + "settings": { + "search_dirs": [ + "src/dufmech", + "scripts" + ], + "save_helpers": [ + "write_records", + "new_history" + ], + "validators": [ + "validate_record\\(", + "_validate_record\\(", + "_validate_content\\(" + ], + "curation_markers": [ + "new_history\\(" + ] + } + }, + "sssom_export": { + "status": "enabled", + "settings": { + "mapping_globs": [ + "exports/sssom/*.sssom.tsv" + ] + } + }, + "metpo_proposal": { + "status": "disabled", + "reason": "No proposals/ directory exists. Enable when family mechanisms need new METPO terms and the repository adopts the proposal contract.", + "reason_claims": { + "absent": [ + "proposals" + ] + } + }, + "source_queue": { + "status": "enabled", + "settings": { + "queue_path": "curation/source_queue.tsv", + "extensions": [ + "implementation", + "reviewed_on", + "review_basis", + "script", + "artifacts", + "license_url" + ], + "required_when_adopted": [ + "script", + "artifacts", + "license_url", + "review_basis" + ] + } + }, + "site_contract": { + "status": "enabled", + "settings": { + "site_path": "pages" + } + }, + "source_catalogue": { + "status": "enabled" + }, + "unmapped_inventory_input": { + "status": "not_applicable", + "reason": "Protein-family evidence is not a culture-medium ingredient corpus." + }, + "causal_graph_coverage": { + "status": "disabled", + "reason": "The schema supports scientific assertions, but the seeded corpus has no curated mechanistic assertions or adopted causal-graph projection in a supported shared coverage shape." + } + } } }, "artifact_count": 20 diff --git a/_fleet/data/site_audit.json b/_fleet/data/site_audit.json index 3aa88c9..8187314 100644 --- a/_fleet/data/site_audit.json +++ b/_fleet/data/site_audit.json @@ -45,10 +45,10 @@ }, { "repo": "culturebotai-claw", - "sha": "ad3862e7a5bd771f94c320bde5fd364d3460884d", - "commit_date": "2026-10-03T10:49:13Z", - "readme_url": "https://github.com/CultureBotAI/culturebotai-claw/blob/ad3862e7a5bd771f94c320bde5fd364d3460884d/README.md", - "notes": "The ad3862e snapshot declares 11 canonical fleet members, including PathwayMech, 20 governed artifacts and 26 capabilities per member. PathwayMech KGX and SSSOM export contracts are enabled. DUFMech is included in the website census and statistics but remains undeclared in the upstream manifest; its capability row must not invent adoption states." + "sha": "73958edb97994bc16c5404443956ee64c47bfe9b", + "commit_date": "2026-10-07T20:46:26Z", + "readme_url": "https://github.com/CultureBotAI/culturebotai-claw/blob/73958edb97994bc16c5404443956ee64c47bfe9b/README.md", + "notes": "The published 73958ed snapshot declares 12 canonical fleet members, including DUFMech, 20 governed artifacts and 26 capabilities per member. This manifest-only refresh retains the October 5 Mech census, card and statistics pins; the 24 website-feature criteria are a separate evidence surface. DUFMech has 20 enabled, 3 disabled and 3 not_applicable canonical declarations, with reasons and settings preserved verbatim. Its enabled offline adapters include genuine OAK correspondence to frozen Pfam labels, retained-abstract knowledge-gap proposals and KGX/SSSOM exports. Knowledge-gap scheduled execution remains false; provider-backed deep research, METPO proposals and causal-graph coverage remain disabled. This governance-pin update does not claim scientific characterization, live source freshness or a full data refresh." }, { "repo": "CultureMech", diff --git a/_fleet/data/site_features.json b/_fleet/data/site_features.json index 5382d71..de82086 100644 --- a/_fleet/data/site_features.json +++ b/_fleet/data/site_features.json @@ -681,126 +681,128 @@ "DUFMech": { "site": "https://culturebotai.github.io/DUFMech/", "repository": "https://github.com/CultureBotAI/DUFMech", - "deployed_revision": "c29601f00cf589787377e87c510303d225349406", + "deployed_revision": "1dccc4ff61998e78f12448c52f37e4d370fe7299", + "checked_on": "2026-10-07", + "scope": "DUF-only recheck bound to successful github-pages deployment 6920450378 at 1dccc4ff61998e78f12448c52f37e4d370fe7299. Fresh post-129 checks verified 26 byte-exact public paths and desktop/mobile light/dark behavior, completed by a separate review of 12 new screenshots; the raw automated receipt remains unchanged. The 24 criteria also reuse retained October 7 supplementary checks of identifier/label searches, filters, counts, all sort options, copied URL state, category/navigation views, 390 px layouts, deliberate catalogue failures and JavaScript-free pagination, after all 19,881 artifact-file digest entries were verified identical. Catalogue completeness combines the exact served inventory and complete served bulk-index IDs with exhaustive offline coverage of 131 listing pages and representative public record routes, not a complete public record crawl. Deployed bytes match artifact ef7e2d01d337ce94c12abdda282a76ae5faaf313; build 3db152edc7acea72 pins corpus source 658dc8c9e4ed2587f7bf1c62ee59563f327706de, distinct from deployment. Retained external checks cover identical immutable targets and bounded mutable targets/official identity metadata; these were not all re-fetched in the post-129 run. No external provider application-rendering or scientific-review claim. GitHub code-license HTML returned 429 during the earlier supplementary check; raw project license bytes were verified separately. P33017 remains an inactive historical reference. All 6,532 families remain SEEDED and UNSCORED with zero curated functional assertions; retained reports are scoped non-scientific audits. Other sites retain the October 5 baseline. These 24 website criteria do not promote any of the 26 repository capabilities.", "features": { "search": { - "status": "missing", - "note": "The single page has no search box and no script; finding a family among the 6,532 rows relies on the browser's own find.", + "status": "present", + "note": "The labelled family search covers all 6,532 families. PF04149, Domain of unknown function (DUF397) and IPR007278 each find PF04149; PF31276 is also found. Each tested result opens its family page, and browser Back restores the query.", "url": "https://culturebotai.github.io/DUFMech/" }, "facets": { - "status": "missing", - "note": "There are no filter controls for seed status, characterization or counts; the page has no inputs or JavaScript.", + "status": "present", + "note": "Seed-status and characterization-status selects filter the main listing, with Reset. Historical DUFs give 378 of 6,532 and unknown candidates 6,154 of 6,532; combining historical status, UNSCORED and PF02698 gives one match. Reset restores all families.", "url": "https://culturebotai.github.io/DUFMech/" }, "result_counts": { - "status": "partial", - "note": "Only a static total is shown, the 6,532 Families tile; with no search or filter there is no live matching count.", + "status": "present", + "note": "The live matching count updates with search and filters, independently of the total: PF04149 gives 1 of 6,532 families match. An unmatched query gives zero and an empty-state message; Reset restores 6,532.", "url": "https://culturebotai.github.io/DUFMech/" }, "sorting": { - "status": "missing", - "note": "The table is fixed in descending protein-count order; clicking the column headers changes nothing and there is no sort control.", + "status": "present", + "note": "The sort selector changes Pfam accession and protein-count order. All offered sort options were exercised and their first 50 rows compared with the complete served catalogue, including deterministic accession tie-breaking.", "url": "https://culturebotai.github.io/DUFMech/" }, "shareable_state": { - "status": "not_applicable", - "note": "The page has no search, filters or sort controls and no script, so there is no view state to share; loading it with ?q=PF02698#PF02698 shows the same 6,532 rows.", + "status": "present", + "note": "Search, seed status, characterization, sort and page are encoded in URL parameters. A copied second-page DUF search with UNKNOWN_CANDIDATE, UNSCORED and Pfam ascending restored every control and result on a new page and reload; record Back navigation also restored search.", "url": "https://culturebotai.github.io/DUFMech/" }, "full_catalogue": { "status": "present", - "note": "One table lists all 6,532 families with no duplicates, matching the page's own 6,532 Families tile and the published index.json.", + "note": "All 6,532 family IDs occur exactly once across 131 static listing pages and have HTML/JSON artifacts. Completeness was checked through the verified deployment, exact served inventory, complete served bulk IDs, exhaustive offline listing coverage and representative public record routes, not a complete public record crawl. The last static page shows 32 rows without JavaScript.", "url": "https://culturebotai.github.io/DUFMech/" }, "record_pages": { - "status": "missing", - "note": "Families have no pages of their own and rows carry no anchors; the only per-family link is the Pfam accession, which opens the InterPro API.", - "url": "https://culturebotai.github.io/DUFMech/" + "status": "present", + "note": "Each family has its own static URL under families/, linked from the listing and paired with JSON. The verified artifact contains all 6,532 routes; sampled public PF04149, PF02698 and PF31276 pages opened successfully. This is not a complete public-route crawl.", + "url": "https://culturebotai.github.io/DUFMech/families/PF04149.html" }, "term_links": { - "status": "partial", - "note": "Each Pfam accession sits beside its family name and links out, but to a raw JSON view of the InterPro API rather than the InterPro entry page; InterPro IDs are not shown.", - "url": "https://culturebotai.github.io/DUFMech/" + "status": "present", + "note": "Record grounding shows readable family labels beside Pfam and integrated InterPro identifiers and links to their entry pages. PF04149 and IPR007278 targets returned 200 and official metadata confirmed their identities. Provider application rendering was not re-audited.", + "url": "https://culturebotai.github.io/DUFMech/families/PF04149.html" }, "evidence": { - "status": "missing", - "note": "No PMIDs, DOIs or family descriptions are shown, though the published index.json has InterPro citations for 585 families; Evidence counts reads Not scored in all 6,532 rows.", - "url": "https://culturebotai.github.io/DUFMech/" + "status": "present", + "note": "Imported descriptions link their source and references. PF02698 links UniProt entries and unresolved internal InterPro PUB citations to the originating entry, not invented PMIDs. P33017 resolves as an inactive, demerged historical accession, not an active protein. These links do not establish functional characterization; the corpus has zero curated assertions.", + "url": "https://culturebotai.github.io/DUFMech/families/PF02698.html" }, "review_status": { "status": "present", - "note": "Each row shows its Seed status (4,533 UNKNOWN CANDIDATE, 1,999 KNOWN HISTORICAL DUF) and Characterization, which is UNSCORED for all 6,532.", - "url": "https://culturebotai.github.io/DUFMech/" + "note": "Records distinguish curation status, imported seed status and characterization status. All 6,532 remain SEEDED and UNSCORED, including PF04149 after its scoped integrity review; historical-DUF seed labels are not scientific-review status.", + "url": "https://culturebotai.github.io/DUFMech/families/PF04149.html" }, "curation_history": { - "status": "missing", - "note": "No per-family curation events, dates or agents appear; the page names only the worklist version for the whole corpus.", - "url": "https://culturebotai.github.io/DUFMech/" + "status": "present", + "note": "PF04149 shows one actual REVIEW event at 2026-10-07T12:26:02Z by Codex with no_change outcome, scope and a pinned sidecar link, plus four associated retained reviews. All are scoped non-scientific audits; status stays SEEDED/UNSCORED. Records without events, such as PF31276, say none were supplied.", + "url": "https://culturebotai.github.io/DUFMech/families/PF04149.html" }, "source_link": { - "status": "missing", - "note": "Rows link only to InterPro; nothing links to the worklist JSON or TSV or to any other file in the CultureBotAI/DUFMech repository.", - "url": "https://culturebotai.github.io/DUFMech/" + "status": "present", + "note": "Family pages link their own data/families/PFxxxxx.yaml on GitHub at source commit 658dc8c9e4ed, plus a build-local YAML copy and per-family JSON. The sampled PF04149 pinned source and served copy have matching bytes; the source pin is distinct from the Pages deployment commit.", + "url": "https://culturebotai.github.io/DUFMech/families/PF04149.html" }, "domain_view": { - "status": "missing", - "note": "There is no structure, domain architecture or other visual, although the page's own tiles say 6,478 families have AlphaFold models.", - "url": "https://culturebotai.github.io/DUFMech/" + "status": "present", + "note": "PF04149 displays two frozen member sequence-domain tracks: A0A010YFW0 residues 9-60 of 67 and A0A010YYK3 residues 5-57 of 65. Geometry and labels were checked at desktop/mobile widths in both themes. These are sampled sequence coordinates, not a 3D structure, full-family architecture or alignment.", + "url": "https://culturebotai.github.io/DUFMech/families/PF04149.html" }, "cross_mech_links": { - "status": "missing", - "note": "No links to sibling Mechs or kg-microbe, although ProteinTraitsMech publishes records for the same Pfam families, such as Pfam:PF04149, DUF397.", - "url": "https://culturebotai.github.io/DUFMech/" + "status": "present", + "note": "Related-record tables link specific ProteinTraitsMech YAML records at a pinned revision, not only the sibling homepage. PF04149 links its Pfam and InterPro domain records; the sampled Pfam target resolves and its raw record identifies PF04149/DUF397.", + "url": "https://culturebotai.github.io/DUFMech/families/PF04149.html" }, "corpus_stats": { "status": "present", - "note": "Six generated tiles: 6,532 families, 6,492 with InterPro IDs, 820 with structures, 6,478 with AlphaFold models, and per-family protein and match totals.", + "note": "Generated landing statistics show 6,532 families, 6,492 with InterPro IDs, 820 with structures and 6,478 with AlphaFold models, matching the served index. Current seed subsets are 6,154 unknown candidates and 378 historical DUFs. Upstream structure/model counters do not imply local structures or curated function.", "url": "https://culturebotai.github.io/DUFMech/" }, "category_browse": { - "status": "missing", - "note": "There are no category pages or cards; seed-status and characterization groups appear only as values in the one table.", - "url": "https://culturebotai.github.io/DUFMech/" + "status": "present", + "note": "Categories is linked from the landing navigation and opens a category index with separate paginated unknown-candidate and historical-DUF subsets, containing 6,154 and 378 families. Both subset pages opened with linked family rows.", + "url": "https://culturebotai.github.io/DUFMech/categories.html" }, "suite_nav": { - "status": "missing", - "note": "The page has no navigation at all: no link to the X-Mech directory, sibling Mechs, GitHub or the CultureBotAI organization.", + "status": "present", + "note": "A visible All Mech projects navigation link appears on the landing, category, record, sources and schema pages and targets https://culturebotai.github.io/mechs/. The suite destination returned 200 in the bounded live check.", "url": "https://culturebotai.github.io/DUFMech/" }, "downloads": { - "status": "missing", - "note": "Nothing on the page links to data or to the repository; its only links are Pfam accessions that open the InterPro API. An unlinked index.json with all 6,532 families (6.4 MB) is served at the site root.", - "url": "https://culturebotai.github.io/DUFMech/" + "status": "present", + "note": "Sources & schema visibly links the complete index.json export. Its served bytes match the final artifact and contain all 6,532 family IDs and metadata entries with provenance. Per-family JSON/YAML and sampled member JSON/TSV are additional downloads, not substitutes for the full export.", + "url": "https://culturebotai.github.io/DUFMech/sources.html" }, "schema_docs": { - "status": "not_applicable", - "note": "DUFMech has no LinkML schema; its records are a frozen JSON and TSV worklist whose manifest lists only field names, and the page explains only how its totals are computed.", - "url": "https://culturebotai.github.io/DUFMech/" + "status": "present", + "note": "Sources & schema links readable LinkML documentation covering FamilyRecord, the human-owned FamilyCuration overlay, event fields, provenance and enums. The documentation links the downloadable LinkML schema; both served documentation and schema bytes match the verified artifact.", + "url": "https://culturebotai.github.io/DUFMech/schema.html" }, "license": { - "status": "missing", - "note": "No license is stated on the page, although the repository licenses data under CC BY 4.0 and code under BSD-3-Clause.", - "url": "https://culturebotai.github.io/DUFMech/" + "status": "present", + "note": "Shared footers state project data CC BY 4.0 and code BSD 3-Clause, with license links and a third-party-terms caveat. Raw project license files matched the repository policy; the GitHub code-license HTML view was throttled with 429 during the retained October 7 supplementary check. No permission for unverified upstream datasets is implied.", + "url": "https://culturebotai.github.io/DUFMech/sources.html" }, "build_provenance": { "status": "present", - "note": "The page names the corpus snapshot it shows, worklist interpro-pfam-duf-2026-10-01, but gives no build date or commit.", + "note": "Footers state site build 3db152edc7acea72 and pinned corpus source 658dc8c9e4ed, alongside dated frozen inputs. These match the served index and verified artifact ef7e2d01d337; corpus-source, artifact and build provenance are distinct from deployed revision 1dccc4ff6199.", "url": "https://culturebotai.github.io/DUFMech/" }, "theme_toggle": { - "status": "partial", - "note": "The page follows the OS color scheme through prefers-color-scheme, with a dark background in dark mode, but has no toggle.", + "status": "present", + "note": "System/Light/Dark controls work across landing, category, record, sources, schema and cross-Mech pages. Plato checked saved preference across reload and system preference changes; supplementary navigation pages were checked in both themes at 1440 and 390 pixels.", "url": "https://culturebotai.github.io/DUFMech/" }, "responsive": { "status": "present", - "note": "Viewport meta is set and the page does not overflow at 390 px; the 1,100 px table scrolls sideways in its own region. The site has no other pages or record pages.", - "url": "https://culturebotai.github.io/DUFMech/" + "note": "Main navigation pages, both seed subsets and sampled records fit 390 pixels in light and dark themes. Wide tables stay in their scroll regions; PF04149's last related-record column remains reachable. Supplementary sources/schema/PF02698 screenshots show no incoherent overlap. This is bounded browser coverage, not rendering every record.", + "url": "https://culturebotai.github.io/DUFMech/families/PF04149.html" }, "load_failure": { - "status": "not_applicable", - "note": "The page is fully pre-rendered and fetches no data; its only request beyond the HTML is style.css.", + "status": "present", + "note": "With catalogue.json returning 503, malformed data or an aborted request, enhanced browsing shows an error saying URL parameters were not applied, while retaining 50 static rows and static pagination. The final static page also works without JavaScript. This feature applies because enhanced browsing fetches data.", "url": "https://culturebotai.github.io/DUFMech/" } } diff --git a/mechs.md b/mechs.md index 10c3b18..5b15233 100644 --- a/mechs.md +++ b/mechs.md @@ -7,7 +7,7 @@ permalink: /mechs/ # X-Mech Suite: twelve autonomous knowledge factories, one shared standard -The X-Mech suite brings together twelve autonomous knowledge factories that describe a microbe at every scale: its taxon and strain identity, habitat, community, traits, pathways, cellular structures, protein functions and unresolved domains, natural products, antibiotics, ingredients and culture media. Established corpora curate structured records with evidence and provenance; DUFMech begins with an InterPro/Pfam seed worklist. [culturebotai-claw](https://github.com/CultureBotAI/culturebotai-claw) coordinates the eleven projects currently declared in its fleet manifest. +The X-Mech suite brings together twelve autonomous knowledge factories that describe a microbe at every scale: its taxon and strain identity, habitat, community, traits, pathways, cellular structures, protein functions and unresolved domains, natural products, antibiotics, ingredients and culture media. Established corpora curate structured records with evidence and provenance; DUFMech begins with an InterPro/Pfam seed worklist. [culturebotai-claw](https://github.com/CultureBotAI/culturebotai-claw) coordinates the twelve projects currently declared in its fleet manifest. Each X-Mech is an **autonomous knowledge factory** that curates, validates, and connects scientific evidence to enable discovery, with human oversight. Its knowledge base is the collection of structured records it produces and maintains. @@ -552,7 +552,7 @@ Each X-Mech is an **autonomous knowledge factory** that curates, validates, and if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", init); } else { init(); } function init() { var DATA = {"order":["HabitatMech","CommunityMech","TraitMech","PathwayMech","CellStructureMech","ProteinTraitsMech","DUFMech","NaturalProductMech","AntibioticMech","MediaIngredientMech","CultureMech","TaxonMech"],"voc":["DOI","PMID","NCBITaxon","CHEBI","UniProt","GO","PDB","EC","ENVO","UBERON","InterPro","BacDive","RO","KEGG","MICRO","RHEA","Pfam","BFO","CultureCollection","ComplexPortal","MetaCyc","METPO","PubChem","genbank","CAS","FOODON","MESH","NCIT","PATO","PMCID","GOLD","GTDB","ARO","biosample","bioproject","NCBIfam","SCOP","IMG","SO","SMART","MIBiG","Reactome","MediaDive","Wikipedia","BTO","patent","ChEMBL","UM-BBD","HMDB","PO","ECO","RNAcentral","Zenodo","OSTI","Rfam","StrainInfo","CATH","CDD","ncbi.assembly","PROSITE","patric","ECOD","INSDC","LPSN","PANTHER","AlphaFoldDB","IEDB","OrthoDB","gomodel","TED","atb.assembly","HAMAP","MCSA","ena.analysis","MOD","TCDB","COG","UNII","ISBN","KOMODO","PRINTS","GO_REF","TOGO","OMA","reaxys","CAZy","NPAtlas","SGD","MEROPS","OPM","RESID","Unimod","WikiPathways","SFLD","DrugBank","MEDIADB","drugcentral","knapsack","ELM","MI","DeltaMass","LINCS","CL","RepeatsDB","NIF_Subcellular","PHI-base","PHIPO","ChemSpider","ppdb","pesticides","LIPIDMAPS","VZ","UniPathway","gmelin","vsdb","IDPO","CyanoMetDB","FooDB","GNO","UO","GitHub","EMDB","IUPHAR","MA","ZFA","bpdb","CORUM","ISSN","FMA","MP","LOTUS","FBbt","HAO","XAO","GlyTouCan","IntAct","PO_REF","molbase","OMIM","CEPH","WB_REF","YMDB","CryoETDataPortal","ECMDB","JSTOR","NCBI_Nuccore","NCBI_Protein","NMDC","OBI","PNNLDH","SRA","WBbt","BCO-DMO","DDANAT","FB","GNPS","MG-RAST","RNAmods","SABIO-RK","USGS"],"heat":{"HabitatMech":{"ARO":0,"AlphaFoldDB":0,"BCO-DMO":0,"BFO":0,"BTO":1367,"BacDive":167,"CAS":0,"CATH":0,"CAZy":0,"CDD":0,"CEPH":4,"CHEBI":24,"CL":0,"COG":0,"CORUM":0,"ChEMBL":0,"ChemSpider":0,"ComplexPortal":0,"CryoETDataPortal":0,"CultureCollection":0,"CyanoMetDB":0,"DDANAT":0,"DOI":117,"DeltaMass":0,"DrugBank":0,"EC":0,"ECMDB":0,"ECO":0,"ECOD":0,"ELM":0,"EMDB":0,"ENVO":3368,"FB":0,"FBbt":0,"FMA":0,"FOODON":198,"FooDB":0,"GNO":0,"GNPS":0,"GO":7,"GOLD":2562,"GO_REF":0,"GTDB":0,"GitHub":0,"GlyTouCan":0,"HAMAP":0,"HAO":8,"HMDB":0,"IDPO":0,"IEDB":0,"IMG":0,"INSDC":0,"ISBN":0,"ISSN":0,"IUPHAR":0,"IntAct":0,"InterPro":0,"JSTOR":0,"KEGG":0,"KOMODO":0,"LINCS":0,"LIPIDMAPS":0,"LOTUS":0,"LPSN":0,"MA":0,"MCSA":0,"MEDIADB":0,"MEROPS":0,"MESH":83,"METPO":0,"MG-RAST":0,"MI":0,"MIBiG":0,"MICRO":0,"MOD":0,"MP":0,"MediaDive":0,"MetaCyc":0,"NCBITaxon":13228,"NCBI_Nuccore":0,"NCBI_Protein":0,"NCBIfam":0,"NCIT":38,"NIF_Subcellular":0,"NMDC":0,"NPAtlas":0,"OBI":0,"OMA":0,"OMIM":0,"OPM":0,"OSTI":0,"OrthoDB":0,"PANTHER":0,"PATO":4,"PDB":0,"PHI-base":0,"PHIPO":0,"PMCID":0,"PMID":517,"PNNLDH":0,"PO":117,"PO_REF":0,"PRINTS":0,"PROSITE":0,"Pfam":0,"PubChem":0,"RESID":0,"RHEA":0,"RNAcentral":0,"RNAmods":0,"RO":0,"Reactome":0,"RepeatsDB":0,"Rfam":0,"SABIO-RK":0,"SCOP":0,"SFLD":0,"SGD":0,"SMART":0,"SO":0,"SRA":0,"StrainInfo":0,"TCDB":0,"TED":0,"TOGO":0,"UBERON":1123,"UM-BBD":0,"UNII":0,"UO":0,"USGS":0,"UniPathway":0,"UniProt":0,"Unimod":0,"VZ":0,"WB_REF":0,"WBbt":0,"WikiPathways":0,"Wikipedia":0,"XAO":0,"YMDB":0,"ZFA":0,"Zenodo":0,"atb.assembly":0,"bioproject":0,"biosample":0,"bpdb":0,"drugcentral":0,"ena.analysis":0,"genbank":0,"gmelin":0,"gomodel":0,"knapsack":0,"molbase":0,"ncbi.assembly":0,"patent":0,"patric":0,"pesticides":0,"ppdb":0,"reaxys":0,"vsdb":0},"CommunityMech":{"ARO":0,"AlphaFoldDB":0,"BCO-DMO":1,"BFO":0,"BTO":0,"BacDive":1,"CAS":0,"CATH":0,"CAZy":0,"CDD":0,"CEPH":0,"CHEBI":3028,"CL":0,"COG":0,"CORUM":0,"ChEMBL":0,"ChemSpider":0,"ComplexPortal":0,"CryoETDataPortal":0,"CultureCollection":0,"CyanoMetDB":0,"DDANAT":0,"DOI":1322,"DeltaMass":0,"DrugBank":0,"EC":0,"ECMDB":0,"ECO":0,"ECOD":0,"ELM":0,"EMDB":0,"ENVO":593,"FB":0,"FBbt":0,"FMA":0,"FOODON":0,"FooDB":0,"GNO":0,"GNPS":1,"GO":1586,"GOLD":0,"GO_REF":0,"GTDB":2082,"GitHub":30,"GlyTouCan":0,"HAMAP":0,"HAO":0,"HMDB":0,"IDPO":0,"IEDB":0,"IMG":28,"INSDC":0,"ISBN":0,"ISSN":0,"IUPHAR":0,"IntAct":0,"InterPro":0,"JSTOR":0,"KEGG":0,"KOMODO":0,"LINCS":0,"LIPIDMAPS":0,"LOTUS":0,"LPSN":0,"MA":0,"MCSA":0,"MEDIADB":0,"MEROPS":0,"MESH":0,"METPO":0,"MG-RAST":1,"MI":0,"MIBiG":0,"MICRO":0,"MOD":0,"MP":0,"MediaDive":0,"MetaCyc":0,"NCBITaxon":4500,"NCBI_Nuccore":0,"NCBI_Protein":0,"NCBIfam":0,"NCIT":0,"NIF_Subcellular":0,"NMDC":2,"NPAtlas":0,"OBI":0,"OMA":0,"OMIM":0,"OPM":0,"OSTI":6,"OrthoDB":0,"PANTHER":0,"PATO":0,"PDB":0,"PHI-base":0,"PHIPO":0,"PMCID":14,"PMID":7897,"PNNLDH":2,"PO":0,"PO_REF":0,"PRINTS":0,"PROSITE":0,"Pfam":0,"PubChem":0,"RESID":0,"RHEA":0,"RNAcentral":0,"RNAmods":0,"RO":0,"Reactome":0,"RepeatsDB":0,"Rfam":0,"SABIO-RK":0,"SCOP":0,"SFLD":0,"SGD":0,"SMART":0,"SO":0,"SRA":2,"StrainInfo":0,"TCDB":0,"TED":0,"TOGO":0,"UBERON":10,"UM-BBD":0,"UNII":0,"UO":0,"USGS":1,"UniPathway":0,"UniProt":0,"Unimod":0,"VZ":0,"WB_REF":0,"WBbt":0,"WikiPathways":0,"Wikipedia":0,"XAO":0,"YMDB":0,"ZFA":0,"Zenodo":1,"atb.assembly":0,"bioproject":1,"biosample":0,"bpdb":0,"drugcentral":0,"ena.analysis":0,"genbank":0,"gmelin":0,"gomodel":0,"knapsack":0,"molbase":0,"ncbi.assembly":0,"patent":0,"patric":0,"pesticides":0,"ppdb":0,"reaxys":0,"vsdb":0},"TraitMech":{"ARO":0,"AlphaFoldDB":0,"BCO-DMO":0,"BFO":3,"BTO":0,"BacDive":0,"CAS":0,"CATH":0,"CAZy":0,"CDD":0,"CEPH":0,"CHEBI":673,"CL":0,"COG":0,"CORUM":0,"ChEMBL":0,"ChemSpider":0,"ComplexPortal":0,"CryoETDataPortal":0,"CultureCollection":0,"CyanoMetDB":0,"DDANAT":0,"DOI":9122,"DeltaMass":0,"DrugBank":0,"EC":0,"ECMDB":0,"ECO":0,"ECOD":0,"ELM":0,"EMDB":0,"ENVO":22,"FB":0,"FBbt":0,"FMA":0,"FOODON":0,"FooDB":0,"GNO":0,"GNPS":0,"GO":901,"GOLD":0,"GO_REF":0,"GTDB":0,"GitHub":0,"GlyTouCan":0,"HAMAP":0,"HAO":0,"HMDB":0,"IDPO":0,"IEDB":0,"IMG":0,"INSDC":0,"ISBN":0,"ISSN":0,"IUPHAR":0,"IntAct":0,"InterPro":124,"JSTOR":0,"KEGG":0,"KOMODO":0,"LINCS":0,"LIPIDMAPS":0,"LOTUS":0,"LPSN":0,"MA":0,"MCSA":0,"MEDIADB":0,"MEROPS":0,"MESH":0,"METPO":3901,"MG-RAST":0,"MI":0,"MIBiG":0,"MICRO":20,"MOD":0,"MP":0,"MediaDive":0,"MetaCyc":0,"NCBITaxon":1052,"NCBI_Nuccore":0,"NCBI_Protein":0,"NCBIfam":0,"NCIT":0,"NIF_Subcellular":0,"NMDC":0,"NPAtlas":0,"OBI":2,"OMA":0,"OMIM":0,"OPM":0,"OSTI":0,"OrthoDB":0,"PANTHER":0,"PATO":99,"PDB":0,"PHI-base":0,"PHIPO":0,"PMCID":3,"PMID":726,"PNNLDH":0,"PO":0,"PO_REF":0,"PRINTS":0,"PROSITE":0,"Pfam":0,"PubChem":0,"RESID":0,"RHEA":0,"RNAcentral":0,"RNAmods":0,"RO":2897,"Reactome":0,"RepeatsDB":0,"Rfam":0,"SABIO-RK":0,"SCOP":0,"SFLD":0,"SGD":0,"SMART":0,"SO":0,"SRA":0,"StrainInfo":0,"TCDB":0,"TED":0,"TOGO":0,"UBERON":0,"UM-BBD":0,"UNII":0,"UO":0,"USGS":0,"UniPathway":0,"UniProt":407,"Unimod":0,"VZ":0,"WB_REF":0,"WBbt":0,"WikiPathways":0,"Wikipedia":0,"XAO":0,"YMDB":0,"ZFA":0,"Zenodo":0,"atb.assembly":0,"bioproject":0,"biosample":0,"bpdb":0,"drugcentral":0,"ena.analysis":0,"genbank":0,"gmelin":0,"gomodel":0,"knapsack":0,"molbase":0,"ncbi.assembly":0,"patent":0,"patric":0,"pesticides":0,"ppdb":0,"reaxys":0,"vsdb":0},"PathwayMech":{"ARO":0,"AlphaFoldDB":0,"BCO-DMO":0,"BFO":0,"BTO":0,"BacDive":0,"CAS":0,"CATH":0,"CAZy":0,"CDD":0,"CEPH":0,"CHEBI":7322,"CL":0,"COG":0,"CORUM":0,"ChEMBL":0,"ChemSpider":0,"ComplexPortal":0,"CryoETDataPortal":0,"CultureCollection":0,"CyanoMetDB":0,"DDANAT":0,"DOI":0,"DeltaMass":0,"DrugBank":0,"EC":437,"ECMDB":0,"ECO":0,"ECOD":0,"ELM":0,"EMDB":0,"ENVO":0,"FB":0,"FBbt":0,"FMA":0,"FOODON":0,"FooDB":0,"GNO":0,"GNPS":0,"GO":0,"GOLD":0,"GO_REF":0,"GTDB":0,"GitHub":0,"GlyTouCan":0,"HAMAP":0,"HAO":0,"HMDB":1,"IDPO":0,"IEDB":0,"IMG":0,"INSDC":0,"ISBN":0,"ISSN":0,"IUPHAR":0,"IntAct":0,"InterPro":0,"JSTOR":0,"KEGG":0,"KOMODO":0,"LINCS":0,"LIPIDMAPS":0,"LOTUS":0,"LPSN":0,"MA":0,"MCSA":0,"MEDIADB":0,"MEROPS":0,"MESH":0,"METPO":0,"MG-RAST":0,"MI":0,"MIBiG":4,"MICRO":0,"MOD":0,"MP":0,"MediaDive":0,"MetaCyc":194,"NCBITaxon":152,"NCBI_Nuccore":0,"NCBI_Protein":0,"NCBIfam":0,"NCIT":0,"NIF_Subcellular":0,"NMDC":0,"NPAtlas":0,"OBI":0,"OMA":0,"OMIM":0,"OPM":0,"OSTI":0,"OrthoDB":0,"PANTHER":0,"PATO":0,"PDB":0,"PHI-base":0,"PHIPO":0,"PMCID":0,"PMID":206,"PNNLDH":0,"PO":0,"PO_REF":0,"PRINTS":0,"PROSITE":0,"Pfam":0,"PubChem":0,"RESID":0,"RHEA":5169,"RNAcentral":0,"RNAmods":0,"RO":5671,"Reactome":100,"RepeatsDB":0,"Rfam":0,"SABIO-RK":0,"SCOP":0,"SFLD":0,"SGD":1413,"SMART":0,"SO":0,"SRA":0,"StrainInfo":0,"TCDB":0,"TED":0,"TOGO":0,"UBERON":0,"UM-BBD":0,"UNII":0,"UO":0,"USGS":0,"UniPathway":0,"UniProt":123,"Unimod":0,"VZ":0,"WB_REF":0,"WBbt":0,"WikiPathways":661,"Wikipedia":0,"XAO":0,"YMDB":0,"ZFA":0,"Zenodo":0,"atb.assembly":0,"bioproject":0,"biosample":0,"bpdb":0,"drugcentral":0,"ena.analysis":0,"genbank":0,"gmelin":0,"gomodel":18006,"knapsack":0,"molbase":0,"ncbi.assembly":0,"patent":0,"patric":0,"pesticides":0,"ppdb":0,"reaxys":0,"vsdb":0},"CellStructureMech":{"ARO":0,"AlphaFoldDB":0,"BCO-DMO":0,"BFO":1,"BTO":0,"BacDive":0,"CAS":0,"CATH":0,"CAZy":0,"CDD":0,"CEPH":0,"CHEBI":102,"CL":0,"COG":0,"CORUM":0,"ChEMBL":0,"ChemSpider":0,"ComplexPortal":292,"CryoETDataPortal":2,"CultureCollection":0,"CyanoMetDB":0,"DDANAT":0,"DOI":9716,"DeltaMass":0,"DrugBank":0,"EC":2,"ECMDB":0,"ECO":162,"ECOD":0,"ELM":0,"EMDB":28,"ENVO":0,"FB":0,"FBbt":0,"FMA":0,"FOODON":0,"FooDB":0,"GNO":0,"GNPS":0,"GO":21484,"GOLD":0,"GO_REF":0,"GTDB":0,"GitHub":0,"GlyTouCan":0,"HAMAP":0,"HAO":0,"HMDB":0,"IDPO":0,"IEDB":0,"IMG":0,"INSDC":0,"ISBN":0,"ISSN":0,"IUPHAR":0,"IntAct":0,"InterPro":520,"JSTOR":0,"KEGG":0,"KOMODO":0,"LINCS":0,"LIPIDMAPS":0,"LOTUS":0,"LPSN":0,"MA":0,"MCSA":0,"MEDIADB":0,"MEROPS":0,"MESH":0,"METPO":14,"MG-RAST":0,"MI":0,"MIBiG":0,"MICRO":4,"MOD":0,"MP":0,"MediaDive":0,"MetaCyc":0,"NCBITaxon":2146,"NCBI_Nuccore":0,"NCBI_Protein":0,"NCBIfam":8,"NCIT":0,"NIF_Subcellular":0,"NMDC":0,"NPAtlas":0,"OBI":0,"OMA":0,"OMIM":0,"OPM":0,"OSTI":0,"OrthoDB":0,"PANTHER":0,"PATO":0,"PDB":541,"PHI-base":0,"PHIPO":0,"PMCID":0,"PMID":1456,"PNNLDH":0,"PO":0,"PO_REF":0,"PRINTS":0,"PROSITE":0,"Pfam":26,"PubChem":0,"RESID":0,"RHEA":0,"RNAcentral":3,"RNAmods":0,"RO":7,"Reactome":0,"RepeatsDB":0,"Rfam":0,"SABIO-RK":0,"SCOP":0,"SFLD":0,"SGD":0,"SMART":0,"SO":147,"SRA":0,"StrainInfo":0,"TCDB":0,"TED":0,"TOGO":0,"UBERON":0,"UM-BBD":0,"UNII":0,"UO":36,"USGS":0,"UniPathway":0,"UniProt":1471,"Unimod":0,"VZ":0,"WB_REF":0,"WBbt":0,"WikiPathways":0,"Wikipedia":0,"XAO":0,"YMDB":0,"ZFA":0,"Zenodo":0,"atb.assembly":0,"bioproject":0,"biosample":0,"bpdb":0,"drugcentral":0,"ena.analysis":0,"genbank":0,"gmelin":0,"gomodel":0,"knapsack":0,"molbase":0,"ncbi.assembly":0,"patent":0,"patric":0,"pesticides":0,"ppdb":0,"reaxys":0,"vsdb":0},"ProteinTraitsMech":{"ARO":397717,"AlphaFoldDB":27720,"BCO-DMO":0,"BFO":74488,"BTO":0,"BacDive":0,"CAS":0,"CATH":650535,"CAZy":1787,"CDD":434553,"CEPH":0,"CHEBI":374596,"CL":260,"COG":4877,"CORUM":13,"ChEMBL":0,"ChemSpider":0,"ComplexPortal":20753,"CryoETDataPortal":0,"CultureCollection":0,"CyanoMetDB":0,"DDANAT":1,"DOI":193845,"DeltaMass":299,"DrugBank":0,"EC":120213,"ECMDB":0,"ECO":4,"ECOD":152324,"ELM":354,"EMDB":0,"ENVO":0,"FB":1,"FBbt":8,"FMA":10,"FOODON":0,"FooDB":0,"GNO":41,"GNPS":0,"GO":421586,"GOLD":0,"GO_REF":3031,"GTDB":0,"GitHub":0,"GlyTouCan":0,"HAMAP":9608,"HAO":0,"HMDB":0,"IDPO":65,"IEDB":20000,"IMG":0,"INSDC":0,"ISBN":3542,"ISSN":13,"IUPHAR":21,"IntAct":6,"InterPro":1481578,"JSTOR":2,"KEGG":2018,"KOMODO":0,"LINCS":0,"LIPIDMAPS":0,"LOTUS":0,"LPSN":0,"MA":20,"MCSA":9151,"MEDIADB":0,"MEROPS":1205,"MESH":14,"METPO":244,"MG-RAST":0,"MI":326,"MIBiG":0,"MICRO":0,"MOD":5494,"MP":10,"MediaDive":0,"MetaCyc":5666,"NCBITaxon":368293,"NCBI_Nuccore":0,"NCBI_Protein":0,"NCBIfam":145699,"NCIT":0,"NIF_Subcellular":222,"NMDC":0,"NPAtlas":0,"OBI":0,"OMA":2086,"OMIM":5,"OPM":1085,"OSTI":1,"OrthoDB":20000,"PANTHER":31089,"PATO":124,"PDB":250830,"PHI-base":0,"PHIPO":0,"PMCID":1,"PMID":657553,"PNNLDH":0,"PO":53,"PO_REF":6,"PRINTS":3132,"PROSITE":329556,"Pfam":523828,"PubChem":1,"RESID":859,"RHEA":667663,"RNAcentral":148,"RNAmods":1,"RO":278407,"Reactome":8591,"RepeatsDB":239,"Rfam":5,"SABIO-RK":1,"SCOP":68418,"SFLD":569,"SGD":0,"SMART":17835,"SO":19302,"SRA":0,"StrainInfo":0,"TCDB":4899,"TED":13860,"TOGO":0,"UBERON":43,"UM-BBD":406,"UNII":0,"UO":0,"USGS":0,"UniPathway":122,"UniProt":688134,"Unimod":760,"VZ":155,"WB_REF":4,"WBbt":2,"WikiPathways":0,"Wikipedia":935,"XAO":8,"YMDB":0,"ZFA":18,"Zenodo":53,"atb.assembly":0,"bioproject":0,"biosample":0,"bpdb":0,"drugcentral":0,"ena.analysis":0,"genbank":0,"gmelin":0,"gomodel":0,"knapsack":0,"molbase":0,"ncbi.assembly":0,"patent":0,"patric":0,"pesticides":0,"ppdb":0,"reaxys":0,"vsdb":0},"DUFMech":{"ARO":0,"AlphaFoldDB":0,"BCO-DMO":0,"BFO":0,"BTO":0,"BacDive":0,"CAS":0,"CATH":0,"CAZy":0,"CDD":0,"CEPH":0,"CHEBI":0,"CL":0,"COG":0,"CORUM":0,"ChEMBL":0,"ChemSpider":0,"ComplexPortal":0,"CryoETDataPortal":0,"CultureCollection":0,"CyanoMetDB":0,"DDANAT":0,"DOI":0,"DeltaMass":0,"DrugBank":0,"EC":5,"ECMDB":0,"ECO":0,"ECOD":0,"ELM":0,"EMDB":0,"ENVO":0,"FB":0,"FBbt":0,"FMA":0,"FOODON":0,"FooDB":0,"GNO":0,"GNPS":0,"GO":0,"GOLD":0,"GO_REF":0,"GTDB":0,"GitHub":0,"GlyTouCan":0,"HAMAP":0,"HAO":0,"HMDB":0,"IDPO":0,"IEDB":0,"IMG":0,"INSDC":0,"ISBN":0,"ISSN":0,"IUPHAR":0,"IntAct":0,"InterPro":6495,"JSTOR":0,"KEGG":0,"KOMODO":0,"LINCS":0,"LIPIDMAPS":0,"LOTUS":0,"LPSN":0,"MA":0,"MCSA":0,"MEDIADB":0,"MEROPS":0,"MESH":0,"METPO":0,"MG-RAST":0,"MI":0,"MIBiG":0,"MICRO":0,"MOD":0,"MP":0,"MediaDive":0,"MetaCyc":0,"NCBITaxon":0,"NCBI_Nuccore":0,"NCBI_Protein":0,"NCBIfam":0,"NCIT":0,"NIF_Subcellular":0,"NMDC":0,"NPAtlas":0,"OBI":0,"OMA":0,"OMIM":0,"OPM":0,"OSTI":0,"OrthoDB":0,"PANTHER":0,"PATO":0,"PDB":47,"PHI-base":0,"PHIPO":0,"PMCID":0,"PMID":0,"PNNLDH":0,"PO":0,"PO_REF":0,"PRINTS":0,"PROSITE":0,"Pfam":7319,"PubChem":0,"RESID":0,"RHEA":0,"RNAcentral":0,"RNAmods":0,"RO":0,"Reactome":0,"RepeatsDB":0,"Rfam":1,"SABIO-RK":0,"SCOP":2,"SFLD":0,"SGD":0,"SMART":1,"SO":0,"SRA":0,"StrainInfo":0,"TCDB":0,"TED":0,"TOGO":0,"UBERON":0,"UM-BBD":0,"UNII":0,"UO":0,"USGS":0,"UniPathway":0,"UniProt":167,"Unimod":0,"VZ":0,"WB_REF":0,"WBbt":0,"WikiPathways":0,"Wikipedia":0,"XAO":0,"YMDB":0,"ZFA":0,"Zenodo":0,"atb.assembly":0,"bioproject":0,"biosample":0,"bpdb":0,"drugcentral":0,"ena.analysis":0,"genbank":2,"gmelin":0,"gomodel":0,"knapsack":0,"molbase":0,"ncbi.assembly":0,"patent":0,"patric":0,"pesticides":0,"ppdb":0,"reaxys":0,"vsdb":0},"NaturalProductMech":{"ARO":0,"AlphaFoldDB":0,"BCO-DMO":0,"BFO":0,"BTO":0,"BacDive":0,"CAS":0,"CATH":0,"CAZy":0,"CDD":0,"CEPH":0,"CHEBI":2727,"CL":0,"COG":0,"CORUM":0,"ChEMBL":41,"ChemSpider":0,"ComplexPortal":6,"CryoETDataPortal":0,"CultureCollection":2,"CyanoMetDB":56,"DDANAT":0,"DOI":10169,"DeltaMass":0,"DrugBank":0,"EC":150,"ECMDB":0,"ECO":0,"ECOD":0,"ELM":0,"EMDB":0,"ENVO":0,"FB":0,"FBbt":0,"FMA":0,"FOODON":0,"FooDB":0,"GNO":0,"GNPS":0,"GO":12,"GOLD":0,"GO_REF":0,"GTDB":0,"GitHub":0,"GlyTouCan":0,"HAMAP":0,"HAO":0,"HMDB":0,"IDPO":0,"IEDB":0,"IMG":0,"INSDC":0,"ISBN":0,"ISSN":0,"IUPHAR":0,"IntAct":0,"InterPro":0,"JSTOR":0,"KEGG":0,"KOMODO":0,"LINCS":0,"LIPIDMAPS":0,"LOTUS":9,"LPSN":0,"MA":0,"MCSA":0,"MEDIADB":0,"MEROPS":0,"MESH":0,"METPO":0,"MG-RAST":0,"MI":0,"MIBiG":10161,"MICRO":0,"MOD":0,"MP":0,"MediaDive":0,"MetaCyc":0,"NCBITaxon":13935,"NCBI_Nuccore":2,"NCBI_Protein":2,"NCBIfam":0,"NCIT":0,"NIF_Subcellular":0,"NMDC":0,"NPAtlas":1756,"OBI":0,"OMA":0,"OMIM":0,"OPM":0,"OSTI":0,"OrthoDB":0,"PANTHER":0,"PATO":0,"PDB":5,"PHI-base":0,"PHIPO":0,"PMCID":0,"PMID":5749,"PNNLDH":0,"PO":0,"PO_REF":0,"PRINTS":0,"PROSITE":0,"Pfam":0,"PubChem":3325,"RESID":0,"RHEA":920,"RNAcentral":0,"RNAmods":0,"RO":0,"Reactome":0,"RepeatsDB":0,"Rfam":0,"SABIO-RK":0,"SCOP":0,"SFLD":0,"SGD":0,"SMART":0,"SO":0,"SRA":0,"StrainInfo":0,"TCDB":0,"TED":0,"TOGO":0,"UBERON":0,"UM-BBD":0,"UNII":0,"UO":0,"USGS":0,"UniPathway":0,"UniProt":2808,"Unimod":0,"VZ":0,"WB_REF":0,"WBbt":0,"WikiPathways":0,"Wikipedia":0,"XAO":0,"YMDB":0,"ZFA":0,"Zenodo":0,"atb.assembly":0,"bioproject":0,"biosample":0,"bpdb":0,"drugcentral":0,"ena.analysis":0,"genbank":3449,"gmelin":0,"gomodel":0,"knapsack":0,"molbase":0,"ncbi.assembly":0,"patent":8,"patric":0,"pesticides":0,"ppdb":0,"reaxys":0,"vsdb":0},"AntibioticMech":{"ARO":16653,"AlphaFoldDB":0,"BCO-DMO":0,"BFO":0,"BTO":0,"BacDive":0,"CAS":1823,"CATH":0,"CAZy":0,"CDD":0,"CEPH":0,"CHEBI":22104,"CL":0,"COG":0,"CORUM":0,"ChEMBL":415,"ChemSpider":204,"ComplexPortal":0,"CryoETDataPortal":0,"CultureCollection":0,"CyanoMetDB":0,"DDANAT":0,"DOI":4228,"DeltaMass":0,"DrugBank":508,"EC":0,"ECMDB":2,"ECO":0,"ECOD":0,"ELM":0,"EMDB":0,"ENVO":0,"FB":0,"FBbt":0,"FMA":0,"FOODON":0,"FooDB":51,"GNO":0,"GNPS":0,"GO":3,"GOLD":0,"GO_REF":0,"GTDB":0,"GitHub":0,"GlyTouCan":6,"HAMAP":0,"HAO":0,"HMDB":369,"IDPO":0,"IEDB":0,"IMG":0,"INSDC":0,"ISBN":0,"ISSN":0,"IUPHAR":0,"IntAct":0,"InterPro":0,"JSTOR":0,"KEGG":1461,"KOMODO":0,"LINCS":290,"LIPIDMAPS":159,"LOTUS":0,"LPSN":0,"MA":0,"MCSA":0,"MEDIADB":0,"MEROPS":0,"MESH":0,"METPO":0,"MG-RAST":0,"MI":0,"MIBiG":0,"MICRO":0,"MOD":0,"MP":0,"MediaDive":0,"MetaCyc":276,"NCBITaxon":1085,"NCBI_Nuccore":0,"NCBI_Protein":0,"NCBIfam":0,"NCIT":0,"NIF_Subcellular":0,"NMDC":0,"NPAtlas":0,"OBI":0,"OMA":0,"OMIM":0,"OPM":0,"OSTI":0,"OrthoDB":0,"PANTHER":0,"PATO":0,"PDB":339,"PHI-base":217,"PHIPO":217,"PMCID":0,"PMID":1207,"PNNLDH":0,"PO":0,"PO_REF":0,"PRINTS":0,"PROSITE":0,"Pfam":0,"PubChem":592,"RESID":0,"RHEA":0,"RNAcentral":0,"RNAmods":0,"RO":0,"Reactome":0,"RepeatsDB":0,"Rfam":0,"SABIO-RK":0,"SCOP":0,"SFLD":0,"SGD":0,"SMART":0,"SO":0,"SRA":0,"StrainInfo":0,"TCDB":0,"TED":0,"TOGO":0,"UBERON":0,"UM-BBD":16,"UNII":3611,"UO":0,"USGS":0,"UniPathway":0,"UniProt":278,"Unimod":0,"VZ":0,"WB_REF":0,"WBbt":0,"WikiPathways":0,"Wikipedia":738,"XAO":0,"YMDB":3,"ZFA":0,"Zenodo":0,"atb.assembly":0,"bioproject":0,"biosample":0,"bpdb":16,"drugcentral":435,"ena.analysis":0,"genbank":0,"gmelin":95,"gomodel":0,"knapsack":370,"molbase":6,"ncbi.assembly":0,"patent":1062,"patric":0,"pesticides":185,"ppdb":197,"reaxys":2012,"vsdb":67},"MediaIngredientMech":{"ARO":0,"AlphaFoldDB":0,"BCO-DMO":0,"BFO":0,"BTO":3,"BacDive":0,"CAS":1450,"CATH":0,"CAZy":0,"CDD":0,"CEPH":0,"CHEBI":8247,"CL":0,"COG":0,"CORUM":0,"ChEMBL":0,"ChemSpider":0,"ComplexPortal":0,"CryoETDataPortal":0,"CultureCollection":0,"CyanoMetDB":0,"DDANAT":0,"DOI":9,"DeltaMass":0,"DrugBank":0,"EC":0,"ECMDB":0,"ECO":0,"ECOD":0,"ELM":0,"EMDB":0,"ENVO":110,"FB":0,"FBbt":0,"FMA":0,"FOODON":277,"FooDB":0,"GNO":0,"GNPS":0,"GO":0,"GOLD":0,"GO_REF":0,"GTDB":0,"GitHub":0,"GlyTouCan":0,"HAMAP":0,"HAO":0,"HMDB":0,"IDPO":0,"IEDB":0,"IMG":0,"INSDC":0,"ISBN":0,"ISSN":0,"IUPHAR":0,"IntAct":0,"InterPro":0,"JSTOR":0,"KEGG":61,"KOMODO":0,"LINCS":0,"LIPIDMAPS":0,"LOTUS":0,"LPSN":0,"MA":0,"MCSA":0,"MEDIADB":0,"MEROPS":0,"MESH":328,"METPO":0,"MG-RAST":0,"MI":0,"MIBiG":0,"MICRO":368,"MOD":0,"MP":0,"MediaDive":538,"MetaCyc":0,"NCBITaxon":1,"NCBI_Nuccore":0,"NCBI_Protein":0,"NCBIfam":0,"NCIT":318,"NIF_Subcellular":0,"NMDC":0,"NPAtlas":0,"OBI":0,"OMA":0,"OMIM":0,"OPM":0,"OSTI":0,"OrthoDB":0,"PANTHER":0,"PATO":0,"PDB":0,"PHI-base":0,"PHIPO":0,"PMCID":0,"PMID":29,"PNNLDH":0,"PO":0,"PO_REF":0,"PRINTS":0,"PROSITE":0,"Pfam":0,"PubChem":0,"RESID":0,"RHEA":0,"RNAcentral":0,"RNAmods":0,"RO":0,"Reactome":0,"RepeatsDB":0,"Rfam":0,"SABIO-RK":0,"SCOP":0,"SFLD":0,"SGD":0,"SMART":0,"SO":0,"SRA":0,"StrainInfo":0,"TCDB":0,"TED":0,"TOGO":0,"UBERON":22,"UM-BBD":0,"UNII":0,"UO":0,"USGS":0,"UniPathway":0,"UniProt":0,"Unimod":0,"VZ":0,"WB_REF":0,"WBbt":0,"WikiPathways":0,"Wikipedia":0,"XAO":0,"YMDB":0,"ZFA":0,"Zenodo":0,"atb.assembly":0,"bioproject":0,"biosample":0,"bpdb":0,"drugcentral":0,"ena.analysis":0,"genbank":0,"gmelin":0,"gomodel":0,"knapsack":0,"molbase":0,"ncbi.assembly":0,"patent":0,"patric":0,"pesticides":0,"ppdb":0,"reaxys":0,"vsdb":0},"CultureMech":{"ARO":0,"AlphaFoldDB":0,"BCO-DMO":0,"BFO":0,"BTO":0,"BacDive":1,"CAS":1,"CATH":0,"CAZy":0,"CDD":0,"CEPH":0,"CHEBI":160758,"CL":0,"COG":0,"CORUM":0,"ChEMBL":0,"ChemSpider":0,"ComplexPortal":0,"CryoETDataPortal":0,"CultureCollection":170,"CyanoMetDB":0,"DDANAT":0,"DOI":76,"DeltaMass":0,"DrugBank":0,"EC":0,"ECMDB":0,"ECO":0,"ECOD":0,"ELM":0,"EMDB":0,"ENVO":14,"FB":0,"FBbt":0,"FMA":0,"FOODON":224,"FooDB":0,"GNO":0,"GNPS":0,"GO":0,"GOLD":0,"GO_REF":0,"GTDB":0,"GitHub":0,"GlyTouCan":0,"HAMAP":0,"HAO":0,"HMDB":0,"IDPO":0,"IEDB":0,"IMG":0,"INSDC":0,"ISBN":0,"ISSN":0,"IUPHAR":0,"IntAct":0,"InterPro":0,"JSTOR":0,"KEGG":1406,"KOMODO":3262,"LINCS":0,"LIPIDMAPS":0,"LOTUS":0,"LPSN":0,"MA":0,"MCSA":0,"MEDIADB":459,"MEROPS":0,"MESH":0,"METPO":0,"MG-RAST":0,"MI":0,"MIBiG":0,"MICRO":356,"MOD":0,"MP":0,"MediaDive":4940,"MetaCyc":0,"NCBITaxon":63,"NCBI_Nuccore":0,"NCBI_Protein":0,"NCBIfam":0,"NCIT":1,"NIF_Subcellular":0,"NMDC":0,"NPAtlas":0,"OBI":0,"OMA":0,"OMIM":0,"OPM":0,"OSTI":0,"OrthoDB":0,"PANTHER":0,"PATO":0,"PDB":0,"PHI-base":0,"PHIPO":0,"PMCID":0,"PMID":68,"PNNLDH":0,"PO":0,"PO_REF":0,"PRINTS":0,"PROSITE":0,"Pfam":0,"PubChem":0,"RESID":0,"RHEA":0,"RNAcentral":0,"RNAmods":0,"RO":0,"Reactome":0,"RepeatsDB":0,"Rfam":0,"SABIO-RK":0,"SCOP":0,"SFLD":0,"SGD":0,"SMART":0,"SO":0,"SRA":0,"StrainInfo":0,"TCDB":0,"TED":0,"TOGO":2833,"UBERON":138,"UM-BBD":0,"UNII":0,"UO":0,"USGS":0,"UniPathway":0,"UniProt":0,"Unimod":0,"VZ":0,"WB_REF":0,"WBbt":0,"WikiPathways":0,"Wikipedia":0,"XAO":0,"YMDB":0,"ZFA":0,"Zenodo":0,"atb.assembly":0,"bioproject":0,"biosample":1,"bpdb":0,"drugcentral":0,"ena.analysis":0,"genbank":1,"gmelin":0,"gomodel":0,"knapsack":0,"molbase":0,"ncbi.assembly":0,"patent":0,"patric":0,"pesticides":0,"ppdb":0,"reaxys":0,"vsdb":0},"TaxonMech":{"ARO":0,"AlphaFoldDB":0,"BCO-DMO":0,"BFO":0,"BTO":0,"BacDive":556160,"CAS":0,"CATH":0,"CAZy":0,"CDD":0,"CEPH":0,"CHEBI":0,"CL":0,"COG":0,"CORUM":0,"ChEMBL":0,"ChemSpider":0,"ComplexPortal":0,"CryoETDataPortal":0,"CultureCollection":67645,"CyanoMetDB":0,"DDANAT":0,"DOI":402247,"DeltaMass":0,"DrugBank":0,"EC":0,"ECMDB":0,"ECO":0,"ECOD":0,"ELM":0,"EMDB":0,"ENVO":0,"FB":0,"FBbt":0,"FMA":0,"FOODON":0,"FooDB":0,"GNO":0,"GNPS":0,"GO":0,"GOLD":1492983,"GO_REF":0,"GTDB":783276,"GitHub":0,"GlyTouCan":0,"HAMAP":0,"HAO":0,"HMDB":0,"IDPO":0,"IEDB":0,"IMG":68303,"INSDC":100610,"ISBN":0,"ISSN":0,"IUPHAR":0,"IntAct":0,"InterPro":0,"JSTOR":0,"KEGG":0,"KOMODO":0,"LINCS":0,"LIPIDMAPS":0,"LOTUS":0,"LPSN":72735,"MA":0,"MCSA":0,"MEDIADB":0,"MEROPS":0,"MESH":0,"METPO":0,"MG-RAST":0,"MI":0,"MIBiG":0,"MICRO":0,"MOD":0,"MP":0,"MediaDive":0,"MetaCyc":0,"NCBITaxon":9250364,"NCBI_Nuccore":0,"NCBI_Protein":0,"NCBIfam":0,"NCIT":0,"NIF_Subcellular":0,"NMDC":0,"NPAtlas":0,"OBI":0,"OMA":0,"OMIM":0,"OPM":0,"OSTI":0,"OrthoDB":0,"PANTHER":0,"PATO":0,"PDB":0,"PHI-base":0,"PHIPO":0,"PMCID":0,"PMID":20558,"PNNLDH":0,"PO":0,"PO_REF":0,"PRINTS":0,"PROSITE":0,"Pfam":0,"PubChem":0,"RESID":0,"RHEA":0,"RNAcentral":0,"RNAmods":0,"RO":0,"Reactome":0,"RepeatsDB":0,"Rfam":0,"SABIO-RK":0,"SCOP":0,"SFLD":0,"SGD":0,"SMART":0,"SO":0,"SRA":0,"StrainInfo":1434148,"TCDB":0,"TED":0,"TOGO":0,"UBERON":0,"UM-BBD":0,"UNII":0,"UO":0,"USGS":0,"UniPathway":0,"UniProt":0,"Unimod":0,"VZ":0,"WB_REF":0,"WBbt":0,"WikiPathways":0,"Wikipedia":0,"XAO":0,"YMDB":0,"ZFA":0,"Zenodo":0,"atb.assembly":13766,"bioproject":159627,"biosample":202280,"bpdb":0,"drugcentral":0,"ena.analysis":6879,"genbank":0,"gmelin":0,"gomodel":0,"knapsack":0,"molbase":0,"ncbi.assembly":372640,"patent":0,"patric":265105,"pesticides":0,"ppdb":0,"reaxys":0,"vsdb":0}},"cells":{"HabitatMech--BTO":587,"HabitatMech--BacDive":165,"HabitatMech--CEPH":1,"HabitatMech--CHEBI":11,"HabitatMech--DOI":20,"HabitatMech--ENVO":1296,"HabitatMech--FOODON":85,"HabitatMech--GO":2,"HabitatMech--GOLD":2465,"HabitatMech--HAO":2,"HabitatMech--MESH":67,"HabitatMech--NCBITaxon":896,"HabitatMech--NCIT":21,"HabitatMech--PATO":3,"HabitatMech--PMID":34,"HabitatMech--PO":36,"HabitatMech--UBERON":704,"CommunityMech--BCO-DMO":1,"CommunityMech--BacDive":1,"CommunityMech--CHEBI":379,"CommunityMech--DOI":223,"CommunityMech--ENVO":446,"CommunityMech--GNPS":1,"CommunityMech--GO":417,"CommunityMech--GTDB":384,"CommunityMech--GitHub":4,"CommunityMech--IMG":1,"CommunityMech--MG-RAST":1,"CommunityMech--NCBITaxon":460,"CommunityMech--NMDC":1,"CommunityMech--OSTI":6,"CommunityMech--PMCID":14,"CommunityMech--PMID":424,"CommunityMech--PNNLDH":1,"CommunityMech--SRA":1,"CommunityMech--UBERON":10,"CommunityMech--USGS":1,"CommunityMech--Zenodo":1,"CommunityMech--bioproject":1,"TraitMech--BFO":2,"TraitMech--CHEBI":183,"TraitMech--DOI":928,"TraitMech--ENVO":14,"TraitMech--GO":298,"TraitMech--InterPro":63,"TraitMech--METPO":977,"TraitMech--MICRO":6,"TraitMech--NCBITaxon":525,"TraitMech--OBI":1,"TraitMech--PATO":49,"TraitMech--PMCID":2,"TraitMech--PMID":266,"TraitMech--RO":702,"TraitMech--UniProt":187,"PathwayMech--CHEBI":151,"PathwayMech--EC":50,"PathwayMech--HMDB":1,"PathwayMech--MIBiG":1,"PathwayMech--MetaCyc":50,"PathwayMech--NCBITaxon":152,"PathwayMech--PMID":28,"PathwayMech--RHEA":50,"PathwayMech--RO":83,"PathwayMech--Reactome":3,"PathwayMech--SGD":90,"PathwayMech--UniProt":5,"PathwayMech--WikiPathways":12,"PathwayMech--gomodel":86,"CellStructureMech--BFO":1,"CellStructureMech--CHEBI":35,"CellStructureMech--ComplexPortal":20,"CellStructureMech--CryoETDataPortal":2,"CellStructureMech--DOI":799,"CellStructureMech--EC":1,"CellStructureMech--ECO":40,"CellStructureMech--EMDB":14,"CellStructureMech--GO":878,"CellStructureMech--InterPro":99,"CellStructureMech--METPO":5,"CellStructureMech--MICRO":2,"CellStructureMech--NCBITaxon":823,"CellStructureMech--NCBIfam":2,"CellStructureMech--PDB":40,"CellStructureMech--PMID":308,"CellStructureMech--Pfam":9,"CellStructureMech--RNAcentral":1,"CellStructureMech--RO":7,"CellStructureMech--SO":31,"CellStructureMech--UO":19,"CellStructureMech--UniProt":235,"ProteinTraitsMech--ARO":7452,"ProteinTraitsMech--AlphaFoldDB":13860,"ProteinTraitsMech--BFO":17857,"ProteinTraitsMech--CATH":84391,"ProteinTraitsMech--CAZy":893,"ProteinTraitsMech--CDD":79475,"ProteinTraitsMech--CHEBI":30290,"ProteinTraitsMech--CL":258,"ProteinTraitsMech--COG":4877,"ProteinTraitsMech--CORUM":13,"ProteinTraitsMech--ComplexPortal":20579,"ProteinTraitsMech--DDANAT":1,"ProteinTraitsMech--DOI":76876,"ProteinTraitsMech--DeltaMass":297,"ProteinTraitsMech--EC":35363,"ProteinTraitsMech--ECO":1,"ProteinTraitsMech--ECOD":45222,"ProteinTraitsMech--ELM":353,"ProteinTraitsMech--FB":1,"ProteinTraitsMech--FBbt":7,"ProteinTraitsMech--FMA":10,"ProteinTraitsMech--GNO":41,"ProteinTraitsMech--GO":110744,"ProteinTraitsMech--GO_REF":3031,"ProteinTraitsMech--HAMAP":3799,"ProteinTraitsMech--IDPO":33,"ProteinTraitsMech--IEDB":20000,"ProteinTraitsMech--ISBN":3365,"ProteinTraitsMech--ISSN":13,"ProteinTraitsMech--IUPHAR":16,"ProteinTraitsMech--IntAct":5,"ProteinTraitsMech--InterPro":120090,"ProteinTraitsMech--JSTOR":2,"ProteinTraitsMech--KEGG":1967,"ProteinTraitsMech--MA":20,"ProteinTraitsMech--MCSA":1430,"ProteinTraitsMech--MEROPS":1205,"ProteinTraitsMech--MESH":14,"ProteinTraitsMech--METPO":119,"ProteinTraitsMech--MI":147,"ProteinTraitsMech--MOD":1974,"ProteinTraitsMech--MP":10,"ProteinTraitsMech--MetaCyc":4897,"ProteinTraitsMech--NCBITaxon":108500,"ProteinTraitsMech--NCBIfam":56130,"ProteinTraitsMech--NIF_Subcellular":215,"ProteinTraitsMech--OMA":2086,"ProteinTraitsMech--OMIM":4,"ProteinTraitsMech--OPM":544,"ProteinTraitsMech--OSTI":1,"ProteinTraitsMech--OrthoDB":20000,"ProteinTraitsMech--PANTHER":15489,"ProteinTraitsMech--PATO":81,"ProteinTraitsMech--PDB":52174,"ProteinTraitsMech--PMCID":1,"ProteinTraitsMech--PMID":95058,"ProteinTraitsMech--PO":47,"ProteinTraitsMech--PO_REF":6,"ProteinTraitsMech--PRINTS":2106,"ProteinTraitsMech--PROSITE":57599,"ProteinTraitsMech--Pfam":107455,"ProteinTraitsMech--PubChem":1,"ProteinTraitsMech--RESID":722,"ProteinTraitsMech--RHEA":29550,"ProteinTraitsMech--RNAcentral":83,"ProteinTraitsMech--RNAmods":1,"ProteinTraitsMech--RO":39555,"ProteinTraitsMech--Reactome":2883,"ProteinTraitsMech--RepeatsDB":122,"ProteinTraitsMech--Rfam":3,"ProteinTraitsMech--SABIO-RK":1,"ProteinTraitsMech--SCOP":22810,"ProteinTraitsMech--SFLD":303,"ProteinTraitsMech--SMART":3935,"ProteinTraitsMech--SO":18295,"ProteinTraitsMech--TCDB":2598,"ProteinTraitsMech--TED":13860,"ProteinTraitsMech--UBERON":43,"ProteinTraitsMech--UM-BBD":384,"ProteinTraitsMech--UniPathway":121,"ProteinTraitsMech--UniProt":169885,"ProteinTraitsMech--Unimod":757,"ProteinTraitsMech--VZ":154,"ProteinTraitsMech--WB_REF":4,"ProteinTraitsMech--WBbt":1,"ProteinTraitsMech--Wikipedia":913,"ProteinTraitsMech--XAO":8,"ProteinTraitsMech--ZFA":18,"ProteinTraitsMech--Zenodo":20,"DUFMech--EC":4,"DUFMech--InterPro":6492,"DUFMech--PDB":38,"DUFMech--Pfam":6532,"DUFMech--Rfam":1,"DUFMech--SCOP":2,"DUFMech--SMART":1,"DUFMech--UniProt":143,"DUFMech--genbank":1,"NaturalProductMech--CHEBI":457,"NaturalProductMech--ChEMBL":41,"NaturalProductMech--ComplexPortal":1,"NaturalProductMech--CultureCollection":1,"NaturalProductMech--CyanoMetDB":56,"NaturalProductMech--DOI":2615,"NaturalProductMech--EC":17,"NaturalProductMech--GO":2,"NaturalProductMech--LOTUS":8,"NaturalProductMech--MIBiG":3115,"NaturalProductMech--NCBITaxon":3115,"NaturalProductMech--NCBI_Nuccore":1,"NaturalProductMech--NCBI_Protein":1,"NaturalProductMech--NPAtlas":1740,"NaturalProductMech--PDB":1,"NaturalProductMech--PMID":2342,"NaturalProductMech--PubChem":1210,"NaturalProductMech--RHEA":80,"NaturalProductMech--UniProt":251,"NaturalProductMech--genbank":3115,"NaturalProductMech--patent":5,"AntibioticMech--ARO":568,"AntibioticMech--CAS":1797,"AntibioticMech--CHEBI":2814,"AntibioticMech--ChEMBL":411,"AntibioticMech--ChemSpider":204,"AntibioticMech--DOI":126,"AntibioticMech--DrugBank":508,"AntibioticMech--ECMDB":2,"AntibioticMech--FooDB":51,"AntibioticMech--GO":3,"AntibioticMech--GlyTouCan":3,"AntibioticMech--HMDB":368,"AntibioticMech--KEGG":1154,"AntibioticMech--LINCS":288,"AntibioticMech--LIPIDMAPS":158,"AntibioticMech--MetaCyc":276,"AntibioticMech--NCBITaxon":163,"AntibioticMech--PDB":331,"AntibioticMech--PHI-base":23,"AntibioticMech--PHIPO":23,"AntibioticMech--PMID":473,"AntibioticMech--PubChem":590,"AntibioticMech--UM-BBD":16,"AntibioticMech--UNII":210,"AntibioticMech--UniProt":47,"AntibioticMech--Wikipedia":736,"AntibioticMech--YMDB":3,"AntibioticMech--bpdb":16,"AntibioticMech--drugcentral":435,"AntibioticMech--gmelin":95,"AntibioticMech--knapsack":362,"AntibioticMech--molbase":5,"AntibioticMech--patent":525,"AntibioticMech--pesticides":185,"AntibioticMech--ppdb":197,"AntibioticMech--reaxys":1932,"AntibioticMech--vsdb":67,"MediaIngredientMech--BTO":1,"MediaIngredientMech--CAS":739,"MediaIngredientMech--CHEBI":2234,"MediaIngredientMech--DOI":8,"MediaIngredientMech--ENVO":26,"MediaIngredientMech--FOODON":98,"MediaIngredientMech--KEGG":58,"MediaIngredientMech--MESH":111,"MediaIngredientMech--MICRO":110,"MediaIngredientMech--MediaDive":270,"MediaIngredientMech--NCBITaxon":1,"MediaIngredientMech--NCIT":102,"MediaIngredientMech--PMID":8,"MediaIngredientMech--UBERON":9,"CultureMech--BacDive":1,"CultureMech--CAS":1,"CultureMech--CHEBI":6141,"CultureMech--CultureCollection":155,"CultureMech--DOI":14,"CultureMech--ENVO":13,"CultureMech--FOODON":204,"CultureMech--KEGG":329,"CultureMech--KOMODO":1087,"CultureMech--MEDIADB":368,"CultureMech--MICRO":298,"CultureMech--MediaDive":3603,"CultureMech--NCBITaxon":30,"CultureMech--NCIT":1,"CultureMech--PMID":24,"CultureMech--TOGO":2500,"CultureMech--UBERON":72,"CultureMech--biosample":1,"CultureMech--genbank":1,"TaxonMech--BacDive":27640,"TaxonMech--CultureCollection":9159,"TaxonMech--DOI":28127,"TaxonMech--GOLD":18890,"TaxonMech--GTDB":119248,"TaxonMech--IMG":19670,"TaxonMech--INSDC":24944,"TaxonMech--LPSN":22469,"TaxonMech--NCBITaxon":625960,"TaxonMech--PMID":20528,"TaxonMech--StrainInfo":20253,"TaxonMech--atb.assembly":5442,"TaxonMech--bioproject":16897,"TaxonMech--biosample":16783,"TaxonMech--ena.analysis":5439,"TaxonMech--ncbi.assembly":20868,"TaxonMech--patric":19907},"indexed_voc":["ARO","BTO","CAS","CHEBI","ENVO","FOODON","GO","GTDB","InterPro","KEGG","METPO","MIBiG","NCBITaxon","NPAtlas","PATO","PDB","Pfam","RHEA","UBERON","UniProt"],"vocab_edges":[{"a":"HabitatMech","b":"CommunityMech","n":323,"by":{"NCBITaxon":275,"ENVO":42,"UBERON":4,"CHEBI":2},"ex":[{"id":"NCBITaxon:2","label":"Bacteria"},{"id":"ENVO:01001001","label":"plant-associated environment"},{"id":"NCBITaxon:1386","label":"Bacillus"}]},{"a":"HabitatMech","b":"TraitMech","n":124,"by":{"NCBITaxon":121,"ENVO":2,"CHEBI":1},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:1280","label":"Staphylococcus aureus"},{"id":"NCBITaxon:287","label":"Pseudomonas aeruginosa"}]},{"a":"HabitatMech","b":"PathwayMech","n":8,"by":{"NCBITaxon":8},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:2","label":"Bacteria"},{"id":"NCBITaxon:1773","label":"Mycobacterium tuberculosis"}]},{"a":"HabitatMech","b":"CellStructureMech","n":49,"by":{"NCBITaxon":48,"GO":1},"ex":[{"id":"NCBITaxon:2","label":"Bacteria"},{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:1117","label":"Cyanobacteriota"}]},{"a":"HabitatMech","b":"ProteinTraitsMech","n":1250,"by":{"NCBITaxon":1234,"UBERON":12,"CHEBI":2,"GO":2},"ex":[{"id":"NCBITaxon:1280","label":"Staphylococcus aureus"},{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:1869227","label":"bacterium"}]},{"a":"HabitatMech","b":"NaturalProductMech","n":311,"by":{"NCBITaxon":311},"ex":[{"id":"NCBITaxon:56","label":"Sorangium cellulosum"},{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:1931","label":"Streptomyces sp."}]},{"a":"HabitatMech","b":"AntibioticMech","n":32,"by":{"NCBITaxon":32},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:1280","label":"Staphylococcus aureus"},{"id":"NCBITaxon:573","label":"Klebsiella pneumoniae"}]},{"a":"HabitatMech","b":"MediaIngredientMech","n":21,"by":{"ENVO":15,"UBERON":4,"CHEBI":2},"ex":[{"id":"ENVO:00002149","label":"sea water"},{"id":"ENVO:00001998","label":"soil"},{"id":"ENVO:00002263","label":"garden soil"}]},{"a":"HabitatMech","b":"CultureMech","n":23,"by":{"NCBITaxon":12,"ENVO":7,"UBERON":4},"ex":[{"id":"UBERON:0000948","label":"heart"},{"id":"UBERON:0000955","label":"brain"},{"id":"UBERON:0000178","label":"blood"}]},{"a":"HabitatMech","b":"TaxonMech","n":6423,"by":{"NCBITaxon":6423},"ex":[{"id":"NCBITaxon:1280","label":"Staphylococcus aureus"},{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:287","label":"Pseudomonas aeruginosa"}]},{"a":"CommunityMech","b":"TraitMech","n":158,"by":{"NCBITaxon":66,"CHEBI":60,"GO":32},"ex":[{"id":"CHEBI:16526","label":"carbon dioxide"},{"id":"CHEBI:15379","label":"dioxygen"},{"id":"NCBITaxon:1423","label":"Bacillus subtilis"}]},{"a":"CommunityMech","b":"PathwayMech","n":49,"by":{"CHEBI":42,"NCBITaxon":7},"ex":[{"id":"CHEBI:16526","label":"carbon dioxide"},{"id":"CHEBI:28938","label":"ammonium"},{"id":"NCBITaxon:562","label":"Escherichia coli"}]},{"a":"CommunityMech","b":"CellStructureMech","n":73,"by":{"NCBITaxon":47,"CHEBI":14,"GO":12},"ex":[{"id":"NCBITaxon:2","label":"Bacteria"},{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:2157","label":"Archaea"}]},{"a":"CommunityMech","b":"ProteinTraitsMech","n":698,"by":{"CHEBI":279,"NCBITaxon":235,"GO":183,"UBERON":1},"ex":[{"id":"CHEBI:30089","label":"acetate"},{"id":"CHEBI:16526","label":"carbon dioxide"},{"id":"GO:0015979","label":"photosynthesis"}]},{"a":"CommunityMech","b":"NaturalProductMech","n":144,"by":{"NCBITaxon":127,"CHEBI":17},"ex":[{"id":"NCBITaxon:286","label":"Pseudomonas"},{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:1423","label":"Bacillus subtilis"}]},{"a":"CommunityMech","b":"AntibioticMech","n":65,"by":{"CHEBI":43,"NCBITaxon":22},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:287","label":"Pseudomonas aeruginosa"},{"id":"CHEBI:33709","label":"amino acid"}]},{"a":"CommunityMech","b":"MediaIngredientMech","n":231,"by":{"CHEBI":229,"ENVO":2},"ex":[{"id":"CHEBI:17234","label":"glucose"},{"id":"CHEBI:26710","label":"sodium chloride"},{"id":"CHEBI:3312","label":"calcium dichloride"}]},{"a":"CommunityMech","b":"CultureMech","n":152,"by":{"CHEBI":139,"NCBITaxon":8,"ENVO":5},"ex":[{"id":"CHEBI:16526","label":"carbon dioxide"},{"id":"CHEBI:18276","label":"dihydrogen"},{"id":"CHEBI:30089","label":"acetate"}]},{"a":"CommunityMech","b":"TaxonMech","n":1222,"by":{"NCBITaxon":842,"GTDB":380},"ex":[{"id":"NCBITaxon:1423","label":"Bacillus subtilis"},{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:287","label":"Pseudomonas aeruginosa"}]},{"a":"TraitMech","b":"PathwayMech","n":46,"by":{"CHEBI":37,"NCBITaxon":9},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"CHEBI:16526","label":"carbon dioxide"},{"id":"CHEBI:15379","label":"dioxygen"}]},{"a":"TraitMech","b":"CellStructureMech","n":125,"by":{"GO":58,"NCBITaxon":44,"CHEBI":8,"UniProt":6,"METPO":5,"InterPro":4},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:83333","label":"Escherichia coli K-12"},{"id":"NCBITaxon:1423","label":"Bacillus subtilis"}]},{"a":"TraitMech","b":"ProteinTraitsMech","n":672,"by":{"GO":205,"NCBITaxon":148,"METPO":109,"CHEBI":104,"UniProt":57,"InterPro":49},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:83333","label":"Escherichia coli K-12"},{"id":"CHEBI:16526","label":"carbon dioxide"}]},{"a":"TraitMech","b":"NaturalProductMech","n":70,"by":{"NCBITaxon":57,"CHEBI":13},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:1423","label":"Bacillus subtilis"},{"id":"CHEBI:15379","label":"dioxygen"}]},{"a":"TraitMech","b":"AntibioticMech","n":32,"by":{"NCBITaxon":22,"CHEBI":10},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:1280","label":"Staphylococcus aureus"},{"id":"NCBITaxon:287","label":"Pseudomonas aeruginosa"}]},{"a":"TraitMech","b":"MediaIngredientMech","n":56,"by":{"CHEBI":56},"ex":[{"id":"CHEBI:18276","label":"dihydrogen"},{"id":"CHEBI:16526","label":"carbon dioxide"},{"id":"CHEBI:17234","label":"glucose"}]},{"a":"TraitMech","b":"CultureMech","n":37,"by":{"CHEBI":26,"NCBITaxon":11},"ex":[{"id":"CHEBI:16526","label":"carbon dioxide"},{"id":"CHEBI:18276","label":"dihydrogen"},{"id":"CHEBI:17234","label":"glucose"}]},{"a":"TraitMech","b":"TaxonMech","n":293,"by":{"NCBITaxon":293},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:83333","label":"Escherichia coli K-12"},{"id":"NCBITaxon:1358","label":"Lactococcus lactis"}]},{"a":"PathwayMech","b":"CellStructureMech","n":14,"by":{"NCBITaxon":8,"CHEBI":6},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:4932","label":"Saccharomyces cerevisiae"},{"id":"NCBITaxon:2","label":"Bacteria"}]},{"a":"PathwayMech","b":"ProteinTraitsMech","n":879,"by":{"CHEBI":504,"RHEA":326,"UniProt":41,"NCBITaxon":8},"ex":[{"id":"CHEBI:15377","label":"water"},{"id":"NCBITaxon:559292","label":"Saccharomyces cerevisiae (strain ATCC 204508 / S288c)"},{"id":"CHEBI:16526","label":"carbon dioxide"}]},{"a":"PathwayMech","b":"NaturalProductMech","n":49,"by":{"CHEBI":40,"NCBITaxon":7,"MIBiG":1,"UniProt":1},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"CHEBI:15377","label":"water"},{"id":"CHEBI:15379","label":"dioxygen"}]},{"a":"PathwayMech","b":"AntibioticMech","n":15,"by":{"CHEBI":10,"NCBITaxon":5},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:4932","label":"Saccharomyces cerevisiae"},{"id":"NCBITaxon:559292","label":"Saccharomyces cerevisiae (strain ATCC 204508 / S288c)"}]},{"a":"PathwayMech","b":"MediaIngredientMech","n":79,"by":{"CHEBI":79},"ex":[{"id":"CHEBI:15377","label":"water"},{"id":"CHEBI:15740","label":"formate"},{"id":"CHEBI:16526","label":"carbon dioxide"}]},{"a":"PathwayMech","b":"CultureMech","n":37,"by":{"CHEBI":36,"NCBITaxon":1},"ex":[{"id":"CHEBI:15377","label":"water"},{"id":"CHEBI:16526","label":"carbon dioxide"},{"id":"CHEBI:15361","label":"pyruvate"}]},{"a":"PathwayMech","b":"TaxonMech","n":14,"by":{"NCBITaxon":14},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:4932","label":"Saccharomyces cerevisiae"},{"id":"NCBITaxon:1773","label":"Mycobacterium tuberculosis"}]},{"a":"CellStructureMech","b":"ProteinTraitsMech","n":1638,"by":{"GO":1131,"UniProt":240,"InterPro":137,"NCBITaxon":99,"CHEBI":22,"Pfam":9},"ex":[{"id":"GO:0032991","label":"protein-containing complex"},{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:83333","label":"Escherichia coli K-12"}]},{"a":"CellStructureMech","b":"DUFMech","n":2,"by":{"InterPro":2},"ex":[]},{"a":"CellStructureMech","b":"NaturalProductMech","n":37,"by":{"NCBITaxon":34,"CHEBI":3},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:1423","label":"Bacillus subtilis"},{"id":"NCBITaxon:9606","label":"Homo sapiens"}]},{"a":"CellStructureMech","b":"AntibioticMech","n":21,"by":{"NCBITaxon":16,"CHEBI":5},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:4932","label":"Saccharomyces cerevisiae"},{"id":"NCBITaxon:90371","label":"Salmonella enterica subsp. enterica serovar Typhimurium"}]},{"a":"CellStructureMech","b":"MediaIngredientMech","n":12,"by":{"CHEBI":12},"ex":[{"id":"CHEBI:16526","label":"carbon dioxide"},{"id":"CHEBI:17029","label":"chitin"},{"id":"CHEBI:33403","label":"elemental sulfur"}]},{"a":"CellStructureMech","b":"CultureMech","n":8,"by":{"CHEBI":4,"NCBITaxon":4},"ex":[{"id":"CHEBI:16526","label":"carbon dioxide"},{"id":"CHEBI:16261","label":"chitosan"},{"id":"CHEBI:33403","label":"elemental sulfur"}]},{"a":"CellStructureMech","b":"TaxonMech","n":152,"by":{"NCBITaxon":152},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:83333","label":"Escherichia coli K-12"},{"id":"NCBITaxon:90371","label":"Salmonella enterica subsp. enterica serovar Typhimurium"}]},{"a":"ProteinTraitsMech","b":"DUFMech","n":13022,"by":{"Pfam":6532,"InterPro":6490},"ex":[{"id":"InterPro:IPR022579","label":"Neuropilin, C-terminal"},{"id":"InterPro:IPR024599","label":"Retinoblastoma-associated protein, N-terminal"},{"id":"InterPro:IPR015047","label":"Synaptojanin-1/2, RNA recognition motif"}]},{"a":"ProteinTraitsMech","b":"NaturalProductMech","n":1108,"by":{"NCBITaxon":484,"CHEBI":292,"UniProt":235,"RHEA":97},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:100226","label":"Streptomyces coelicolor A3(2)"},{"id":"NCBITaxon:227321","label":"Emericella nidulans (strain FGSC A4 / ATCC 38163 / CBS 112.46 / NRRL 194 / M139)"}]},{"a":"ProteinTraitsMech","b":"AntibioticMech","n":2566,"by":{"ARO":1732,"CHEBI":593,"PDB":140,"NCBITaxon":79,"UniProt":20,"GO":2},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:573","label":"Klebsiella pneumoniae"},{"id":"NCBITaxon:1280","label":"Staphylococcus aureus"}]},{"a":"ProteinTraitsMech","b":"MediaIngredientMech","n":757,"by":{"CHEBI":756,"UBERON":1},"ex":[{"id":"CHEBI:15377","label":"water"},{"id":"CHEBI:15740","label":"formate"},{"id":"CHEBI:18276","label":"dihydrogen"}]},{"a":"ProteinTraitsMech","b":"CultureMech","n":232,"by":{"CHEBI":220,"NCBITaxon":10,"UBERON":2},"ex":[{"id":"CHEBI:15377","label":"water"},{"id":"CHEBI:16526","label":"carbon dioxide"},{"id":"CHEBI:17754","label":"glycerol"}]},{"a":"ProteinTraitsMech","b":"TaxonMech","n":7444,"by":{"NCBITaxon":7444},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:83334","label":"Escherichia coli O157:H7"},{"id":"NCBITaxon:623","label":"Shigella flexneri"}]},{"a":"NaturalProductMech","b":"AntibioticMech","n":284,"by":{"CHEBI":186,"NCBITaxon":96,"UniProt":2},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:287","label":"Pseudomonas aeruginosa"},{"id":"NCBITaxon:330879","label":"Aspergillus fumigatus (strain ATCC MYA-4609 / CBS 101355 / FGSC A1100 / Af293)"}]},{"a":"NaturalProductMech","b":"MediaIngredientMech","n":66,"by":{"CHEBI":66},"ex":[{"id":"CHEBI:15377","label":"water"},{"id":"CHEBI:16828","label":"L-tryptophan"},{"id":"CHEBI:17895","label":"L-tyrosine"}]},{"a":"NaturalProductMech","b":"CultureMech","n":15,"by":{"CHEBI":13,"NCBITaxon":2},"ex":[{"id":"CHEBI:15377","label":"water"},{"id":"CHEBI:16828","label":"L-tryptophan"},{"id":"CHEBI:17895","label":"L-tyrosine"}]},{"a":"NaturalProductMech","b":"TaxonMech","n":1697,"by":{"NCBITaxon":1697},"ex":[{"id":"NCBITaxon:1126","label":"Microcystis aeruginosa"},{"id":"NCBITaxon:1912","label":"Streptomyces hygroscopicus"},{"id":"NCBITaxon:294","label":"Pseudomonas fluorescens"}]},{"a":"AntibioticMech","b":"MediaIngredientMech","n":461,"by":{"CHEBI":314,"CAS":147},"ex":[{"id":"CHEBI:30746","label":"benzoic acid"},{"id":"CHEBI:17334","label":"penicillin"},{"id":"CHEBI:33709","label":"amino acid"}]},{"a":"AntibioticMech","b":"CultureMech","n":29,"by":{"CHEBI":29},"ex":[{"id":"CHEBI:17334","label":"penicillin"},{"id":"CHEBI:48923","label":"erythromycin"},{"id":"CHEBI:30746","label":"benzoic acid"}]},{"a":"AntibioticMech","b":"TaxonMech","n":109,"by":{"NCBITaxon":109},"ex":[{"id":"NCBITaxon:562","label":"Escherichia coli"},{"id":"NCBITaxon:573","label":"Klebsiella pneumoniae"},{"id":"NCBITaxon:470","label":"Acinetobacter baumannii"}]},{"a":"MediaIngredientMech","b":"CultureMech","n":529,"by":{"CHEBI":520,"FOODON":5,"UBERON":3,"ENVO":1},"ex":[{"id":"FOODON:03315426","label":"yeast extract"},{"id":"CHEBI:17234","label":"glucose"},{"id":"CHEBI:53503","label":"cobalt chloride hexahydrate"}]},{"a":"CultureMech","b":"TaxonMech","n":53,"by":{"NCBITaxon":53},"ex":[{"id":"NCBITaxon:210","label":"Helicobacter pylori"},{"id":"NCBITaxon:823","label":"Parabacteroides distasonis"},{"id":"NCBITaxon:851","label":"Fusobacterium nucleatum"}]}]}; - var MANIFEST = {"version":1,"source":{"repository":"CultureBotAI/culturebotai-claw","revision":"ad3862e7a5bd771f94c320bde5fd364d3460884d","url":"https://github.com/CultureBotAI/culturebotai-claw/blob/ad3862e7a5bd771f94c320bde5fd364d3460884d/src/kg_microbe_fleet/fleet.yaml"},"capability_catalogue":{"id_label_validation":{},"curation_history":{},"strict_validation":{},"schema_sync":{},"release_management":{},"build_coordination":{},"documentation":{},"testing":{},"refactoring":{},"coordination_hooks":{},"deep_research":{},"edison_key_discovery":{},"environment_coverage":{"settings":{"record_globs":{"type":"string_list","required_when_enabled":true}}},"knowledge_gap_scan":{"settings":{"window":{"type":"integer","required_when_enabled":true,"minimum":1}}},"vendored_sync":{},"unmapped_inventory_input":{},"source_catalogue":{},"corpus_statistics":{"settings":{"fields":{"type":"string_list","required_when_enabled":true}}},"causal_graph_coverage":{"settings":{"graph_shape":{"type":"string","required_when_enabled":true},"graphs_field":{"type":"string"},"graph_id_field":{"type":"string"},"nodes_field":{"type":"string"},"edges_field":{"type":"string"},"node_id_field":{"type":"string"},"node_type_field":{"type":"string"},"node_grounding_field":{"type":"string"},"edge_subject_field":{"type":"string"},"edge_object_field":{"type":"string"},"edge_predicate_field":{"type":"string"},"edge_evidence_field":{"type":"string"},"record_id_field":{"type":"string"},"scope_field":{"type":"string"},"mechanistic_scopes":{"type":"string_list"},"graph_facets":{"type":"string_list"},"anchor_node_types":{"type":"string_list"},"duplicate_grounding_check":{"type":"boolean"},"exempt_when":{"type":"string_list"},"strata":{"type":"string_list"}}},"page_budgets":{"settings":{"site_path":{"type":"string","required_when_enabled":true},"budgets_path":{"type":"string","required_when_enabled":true}}},"kgx_export":{"settings":{"nodes_path":{"type":"string","required_when_enabled":true},"edges_path":{"type":"string","required_when_enabled":true},"extra_prefixes":{"type":"string_list"}}},"source_queue":{"settings":{"queue_path":{"type":"string","required_when_enabled":true},"extensions":{"type":"string_list"},"required_when_adopted":{"type":"string_list"}}},"metpo_proposal":{"settings":{"class_glob":{"type":"string","required_when_enabled":true},"property_glob":{"type":"string"}}},"sssom_export":{"settings":{"mapping_globs":{"type":"string_list","required_when_enabled":true},"extensions":{"type":"string_list"}}},"writer_audit":{"settings":{"search_dirs":{"type":"string_list","required_when_enabled":true},"save_helpers":{"type":"string_list"},"validators":{"type":"string_list"},"curation_markers":{"type":"string_list"},"exclude":{"type":"string_list"}}},"site_contract":{"settings":{"site_path":{"type":"string","required_when_enabled":true},"published_root":{"type":"string"},"allowed_hosts":{"type":"string_list"}}}},"mechs":{"CultureMech":{"key":"culturemech","github":"CultureBotAI/CultureMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"enabled"},"edison_key_discovery":{"status":"enabled"},"environment_coverage":{"status":"enabled","settings":{"record_globs":["data/merge_yaml/merged/*.yaml"]}},"knowledge_gap_scan":{"status":"enabled","settings":{"window":300}},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["source_environment","medium_type"]}},"causal_graph_coverage":{"status":"not_applicable","reason":"MediaRecipe records are compositions. The schema has no causal-graph slot and no record carries graph-shaped content; what CultureMech's own tooling calls causal-graph coverage (#468) is its review-need score over recipe grounding, not a graph."},"page_budgets":{"status":"disabled","reason":"Generates a site through .github/workflows/generate-pages.yaml but declares no size or file-count budgets, so nothing watches it grow. Adopting them applies here; the limits are the repository's to set.","reason_claims":{"present":[".github/workflows/generate-pages.yaml"]}},"writer_audit":{"status":"enabled","settings":{"search_dirs":["scripts","src/culturemech"],"save_helpers":["write_validated_recipe"],"exclude":["scripts/audit_writers.py"]}},"sssom_export":{"status":"enabled","settings":{"mapping_globs":["output/*.sssom.tsv"],"extensions":["mapping_method"]}},"metpo_proposal":{"status":"disabled","reason":"Carries .claude/commands/ground-or-propose-metpo.md, so the grounding half is present, but has no proposals/ directory and has never minted a METPO id. Adopting applies once a CultureMech term needs one.","reason_claims":{"absent":["proposals"],"present":[".claude/commands/ground-or-propose-metpo.md"]}},"kgx_export":{"status":"disabled","reason":"scripts/export_kgx.py writes to output/kgx but has produced nothing tracked, so there is no graph for this contract to judge. Adopting it means running the exporter first; the check applies here once it does.","reason_claims":{"present":["scripts/export_kgx.py"],"absent":["output/kgx"]}},"source_queue":{"status":"disabled","reason":"Has no curation/source_queue.tsv. AntibioticMech wrote the pattern and CellStructureMech adapted it; adopting it here means ranking this corpus's own candidate sources and verifying their licences, which is curation work rather than a file copy.","reason_claims":{"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"disabled","reason":"Publishes a site built in CI, so no directory in the checkout is the output the check would judge; running it on the Jekyll or template sources reports missing .html files that the build creates. Adopting it means running the check on the build product, which applies here and is not yet wired."},"source_catalogue":{"status":"disabled","reason":"Fetches each source from its own script -- scripts/fetch_komodo_base_volumes.py, scripts/fetch_mediadive_solution_volumes.py, scripts/fetch_pubmed_abstracts.py -- with no download.yaml declaring them, so there is no catalogue to validate. Adopting one would apply here; it has not been written.","reason_claims":{"present":["scripts/fetch_komodo_base_volumes.py","scripts/fetch_mediadive_solution_volumes.py","scripts/fetch_pubmed_abstracts.py"],"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"enabled"}}},"MediaIngredientMech":{"key":"mediaingredientmech","github":"CultureBotAI/MediaIngredientMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"enabled"},"edison_key_discovery":{"status":"enabled"},"environment_coverage":{"status":"enabled","settings":{"record_globs":["data/ingredients/**/*.yaml"]}},"knowledge_gap_scan":{"status":"enabled","settings":{"window":300}},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["ingredient_type","ontology_mapping.mapping_quality"]}},"causal_graph_coverage":{"status":"disabled","reason":"IngredientRecord has no causal-graph slot. Its role facets and components are typed assertions around one ingredient, a star with nothing to connect, and scripts/score_causal_graph_readiness.py ranks their readiness to seed a graph. Enable once records carry graphs.","reason_claims":{"present":["scripts/score_causal_graph_readiness.py"]}},"page_budgets":{"status":"disabled","reason":"Generates a site through .github/workflows/generate-pages.yaml but declares no size or file-count budgets, so nothing watches it grow. Adopting them applies here; the limits are the repository's to set.","reason_claims":{"present":[".github/workflows/generate-pages.yaml"]}},"writer_audit":{"status":"enabled","settings":{"search_dirs":["scripts","src/mediaingredientmech"],"save_helpers":["save_yaml","write_validated_ingredient"],"exclude":["scripts/audit_writers.py"]}},"sssom_export":{"status":"enabled","settings":{"mapping_globs":["mappings/*.sssom.tsv"],"extensions":["source","validation_method"]}},"metpo_proposal":{"status":"not_applicable","reason":"MIM grounds ingredients in ChEBI and FOODON and publishes SSSOM mappings; METPO models microbial phenotypes and processes, which is not the axis this corpus curates."},"kgx_export":{"status":"disabled","reason":"Publishes term mappings rather than a graph; its contribution to kg-microbe is SSSOM. Adopting KGX would apply here only if it starts emitting nodes and edges."},"source_queue":{"status":"disabled","reason":"Has no curation/source_queue.tsv. AntibioticMech wrote the pattern and CellStructureMech adapted it; adopting it here means ranking this corpus's own candidate sources and verifying their licences, which is curation work rather than a file copy.","reason_claims":{"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"disabled","reason":"Publishes a site built in CI, so no directory in the checkout is the output the check would judge; running it on the Jekyll or template sources reports missing .html files that the build creates. Adopting it means running the check on the build product, which applies here and is not yet wired."},"source_catalogue":{"status":"disabled","reason":"Fetches ontologies through download_ontologies.py rather than a declared catalogue, so there is no download.yaml to validate. Adopting one would apply here; it has not been written.","reason_claims":{"present":["scripts/download_ontologies.py"],"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"enabled"}}},"CommunityMech":{"key":"communitymech","github":"CultureBotAI/CommunityMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"enabled"},"edison_key_discovery":{"status":"enabled"},"environment_coverage":{"status":"enabled","settings":{"record_globs":["data/isolates/*.yaml"]}},"knowledge_gap_scan":{"status":"enabled","settings":{"window":305}},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["environment_term"]}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"node_nested_edges","nodes_field":"ecological_interactions","node_id_field":"name","node_type_field":"interaction_type","edges_field":"downstream","edge_object_field":"target","strata":["community_origin","@directory"]}},"page_budgets":{"status":"disabled","reason":"Generates a site through .github/workflows/generate-pages.yaml but declares no size or file-count budgets, so nothing watches it grow. Adopting them applies here; the limits are the repository's to set.","reason_claims":{"present":[".github/workflows/generate-pages.yaml"]}},"writer_audit":{"status":"enabled","settings":{"search_dirs":["scripts","src/communitymech"],"save_helpers":["write_validated_community"],"curation_markers":["record_curation_event"],"exclude":["scripts/audit_writers.py"]}},"sssom_export":{"status":"not_applicable","reason":"Publishes KGX nodes and edges rather than term mappings; its contribution to kg-microbe is a graph, not a mapping set, so there is no SSSOM file for this contract to judge."},"metpo_proposal":{"status":"enabled","settings":{"class_glob":"proposals/*/metpo_proposal_classes_robot.tsv","property_glob":"proposals/*/metpo_proposal_properties_robot.tsv"}},"kgx_export":{"status":"enabled","settings":{"nodes_path":"output/kgx/nodes.tsv","edges_path":"output/kgx/edges.tsv"}},"source_queue":{"status":"disabled","reason":"Has no curation/source_queue.tsv. AntibioticMech wrote the pattern and CellStructureMech adapted it; adopting it here means ranking this corpus's own candidate sources and verifying their licences, which is curation work rather than a file copy.","reason_claims":{"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"enabled","settings":{"site_path":"docs"}},"source_catalogue":{"status":"disabled","reason":"Has no download.yaml; its inputs arrive through per-source scripts rather than a declared catalogue. Adopting one would apply here; it has not been written.","reason_claims":{"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"enabled"}}},"TraitMech":{"key":"traitmech","github":"CultureBotAI/TraitMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"enabled"},"edison_key_discovery":{"status":"enabled"},"environment_coverage":{"status":"not_applicable","reason":"Environment coverage currently compares culture media, ingredients, and microbial communities; trait records are not an environment inventory input."},"knowledge_gap_scan":{"status":"enabled","settings":{"window":300}},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["mapping_status","trait_category"]}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"graph_list","record_id_field":"identifier","scope_field":"scope_status","mechanistic_scopes":["MECHANISTIC"],"anchor_node_types":["TRAIT"],"duplicate_grounding_check":true,"exempt_when":["mapping_status=DEPRECATED","term_kind=OBJECT_PROPERTY|DATATYPE_PROPERTY","trait_category=UPPER"],"strata":["mapping_status","trait_category"]}},"page_budgets":{"status":"disabled","reason":"Serves 490 tracked pages under pages/ straight from main via GitHub Pages -- it has no generate-pages.yaml, unlike the other four -- and declares no size or file-count budgets, so nothing watches them grow. Adopting them applies here; the limits are the repository's to set.","reason_claims":{"present":["pages"],"absent":[".github/workflows/generate-pages.yaml"]}},"writer_audit":{"status":"enabled","settings":{"search_dirs":["scripts","src/traitmech"],"save_helpers":["write_validated_trait"],"curation_markers":["record_curation"],"exclude":["scripts/audit_writers.py"]}},"sssom_export":{"status":"enabled","settings":{"mapping_globs":["proposals/*/metpo_proposal_mappings.sssom.tsv"]}},"metpo_proposal":{"status":"enabled","settings":{"class_glob":"proposals/*/metpo_proposal_classes_robot.tsv","property_glob":"proposals/*/metpo_proposal_properties_robot.tsv"}},"kgx_export":{"status":"disabled","reason":"Publishes trait records and METPO mapping proposals, not a KGX graph."},"source_queue":{"status":"disabled","reason":"Has no curation/source_queue.tsv. AntibioticMech wrote the pattern and CellStructureMech adapted it; adopting it here means ranking this corpus's own candidate sources and verifying their licences, which is curation work rather than a file copy.","reason_claims":{"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"enabled","settings":{"site_path":"pages","published_root":".","allowed_hosts":["cdn.jsdelivr.net"]}},"source_catalogue":{"status":"enabled"},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped-ingredient inventory reads culture-media and ingredient corpora; TraitMech curates traits and has no ingredient records, so scripts/inventory_unmapped_ingredients.py defines no loader for it.","reason_claims":{"present":["claw:scripts/inventory_unmapped_ingredients.py"]}}}},"ProteinTraitsMech":{"key":"proteintraitsmech","github":"CultureBotAI/proteintraitsmech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"enabled"},"edison_key_discovery":{"status":"not_applicable","reason":"ProteinTraitsMech does not use an Edison research-provider key; provider integration is configured through its own supported credential surfaces."},"environment_coverage":{"status":"not_applicable","reason":"Environment coverage currently compares culture media, ingredients, and microbial communities; protein-trait records are not an environment inventory input."},"knowledge_gap_scan":{"status":"not_applicable","reason":"Record-level knowledge-gap scanning targets curated per-record discussion text. This corpus is ontology-derived, so there is no per-record gap surface to scan; the repository is correspondingly absent from the knowledge-gap-scan workflow matrix."},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["trait_axis","mapping_status"]}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"graph_list","record_id_field":"identifier","exempt_when":["mapping_status=DEPRECATED","path:data/traits/function/enzymatic_activity/metpo/*.yaml"],"strata":["trait_axis","@directory"]}},"page_budgets":{"status":"enabled","settings":{"site_path":"_site","budgets_path":"conf/pages_budgets.json"}},"writer_audit":{"status":"not_applicable","reason":"Its scripts/audit_writers.py shares the name and nothing else -- a different tool built on registered editors and guard tests, ~600 lines apart from the other four. This audit does not describe what that one checks, and consolidating them would mean choosing one model over the other rather than removing a duplicate.","reason_claims":{"present":["scripts/audit_writers.py"]}},"sssom_export":{"status":"disabled","reason":"Grounds protein traits directly in its own records rather than publishing a mapping set. Adopting one would apply here; none has been written."},"metpo_proposal":{"status":"disabled","reason":"Carries METPO-grounded records under data/traits/**/metpo/, so it consumes METPO, but proposes no new terms and has no proposals/ directory. Adopting applies once a protein trait needs a term METPO lacks.","reason_claims":{"absent":["proposals"]}},"kgx_export":{"status":"disabled","reason":"Publishes protein-trait records rather than a graph."},"source_queue":{"status":"disabled","reason":"Has no curation/source_queue.tsv. AntibioticMech wrote the pattern and CellStructureMech adapted it; adopting it here means ranking this corpus's own candidate sources and verifying their licences, which is curation work rather than a file copy.","reason_claims":{"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"disabled","reason":"Publishes a site built in CI, so no directory in the checkout is the output the check would judge; running it on the Jekyll or template sources reports missing .html files that the build creates. Adopting it means running the check on the build product, which applies here and is not yet wired."},"source_catalogue":{"status":"enabled"},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped-ingredient inventory reads culture-media and ingredient corpora; ProteinTraitsMech curates protein-trait records and has no ingredient corpus, so scripts/inventory_unmapped_ingredients.py defines no loader for it.","reason_claims":{"present":["claw:scripts/inventory_unmapped_ingredients.py"]}}}},"AntibioticMech":{"key":"antibioticmech","github":"CultureBotAI/AntibioticMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"vendored_sync":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"testing":{"status":"enabled"},"documentation":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"disabled","reason":"Has research-antibiotic, research-entity and deep-research-canary recipes and a research/ tree, but no conf/deep_research_provider.yaml -- the profile every deep-research Mech declares and the contract resolves. Enabled on the recipes alone this would assert a profile that does not exist; the recipes are a research route, not the declared provider contract.","reason_claims":{"present":["research"],"absent":["conf/deep_research_provider.yaml"]}},"edison_key_discovery":{"status":"not_applicable","reason":"Research runs through this repository's own research-antibiotic and research-entity recipes; it uses no Edison provider key."},"environment_coverage":{"status":"not_applicable","reason":"Environment coverage compares culture media, ingredients and microbial communities. An antimicrobial-compound corpus is not an environment inventory input."},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped inventory reconciles ingredient names across media corpora; antimicrobial compounds are not one of its sources."},"knowledge_gap_scan":{"status":"disabled","reason":"Records do not carry the shared Discussion section the scan reads, and this repository is not in the knowledge-gap-scan workflow matrix. Enable once records carry it."},"source_catalogue":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["antimicrobial_class","grounding_status"]}},"source_queue":{"status":"enabled","settings":{"queue_path":"curation/source_queue.tsv"}},"site_contract":{"status":"enabled","settings":{"site_path":"pages"}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"graph_list","record_id_field":"identifier","scope_field":"scope_status","mechanistic_scopes":["MECHANISTIC"],"anchor_node_types":["COMPOUND"],"duplicate_grounding_check":true,"exempt_when":["curation_status=DEPRECATED"],"strata":["antimicrobial_class","curation_status"]}},"page_budgets":{"status":"disabled","reason":"Serves tracked pages under pages/ from main via GitHub Pages and declares no size or file-count budgets, so nothing watches them grow -- 2,956 files and 30.1 MB measured at admission (#230). Adopting them applies here; the limits are this repository's to set.","reason_claims":{"present":["pages"]}},"writer_audit":{"status":"disabled","reason":"Has no scripts/audit_writers.py, so there is no drift between writer copies to remove yet. Adopting it applies once more writers exist.","reason_claims":{"absent":["scripts/audit_writers.py"]}},"sssom_export":{"status":"disabled","reason":"Records carry ChEBI and ARO identifiers inline rather than through a mapping file. Adopting SSSOM applies once a mapping product exists."},"metpo_proposal":{"status":"disabled","reason":"No proposals/ directory and no METPO grounding. Antimicrobial compounds are grounded in ChEBI and ARO inline; adopting applies once a resistance or activity phenotype needs a METPO term.","reason_claims":{"absent":["proposals"]}},"kgx_export":{"status":"disabled","reason":"No exporter and no graph product yet; adopting KGX applies once the corpus is consumed as a graph."}}},"CellStructureMech":{"key":"cellstructuremech","github":"CultureBotAI/CellStructureMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"disabled","reason":"Research so far is source assessment written by hand under research/ with no provider client or research recipe in the justfile; the repository has not decided on a paid research route.","reason_claims":{"present":["research"]}},"edison_key_discovery":{"status":"not_applicable","reason":"CellStructureMech does not use an Edison research-provider key; it has no research provider integration at all."},"environment_coverage":{"status":"not_applicable","reason":"Environment coverage currently compares culture media, ingredients, and microbial communities; cell-structure records are not an environment inventory input."},"knowledge_gap_scan":{"status":"disabled","reason":"Records carry the shared Discussion section, so the scan applies, but the corpus is four records and the repository is not yet in the knowledge-gap-scan workflow matrix; enable once the first tranche of records lands (CellStructureMech#12)."},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["structure_category","mapping_status"]}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"graph_list","record_id_field":"identifier","scope_field":"scope_status","mechanistic_scopes":["MECHANISTIC"],"graph_facets":["graph_kind"],"anchor_node_types":["STRUCTURE"],"exempt_when":["mapping_status=DEPRECATED"],"strata":["structure_category","structure_kind"]}},"page_budgets":{"status":"disabled","reason":"Serves tracked pages under pages/ straight from main via GitHub Pages -- it has no generate-pages.yaml -- and declares no size or file-count budgets, so nothing watches them grow. Adopting them applies here; the limits are the repository's to set.","reason_claims":{"present":["pages"],"absent":[".github/workflows/generate-pages.yaml"]}},"writer_audit":{"status":"disabled","reason":"Has no scripts/audit_writers.py, so there is no drift to remove yet. Adopting it applies here once the corpus grows; the settings are the repository's to declare.","reason_claims":{"absent":["scripts/audit_writers.py"]}},"sssom_export":{"status":"disabled","reason":"Records carry GO cellular-component identifiers inline rather than through a mapping file, and the corpus is four records. Adopting one applies once it grows."},"metpo_proposal":{"status":"disabled","reason":"Structures are grounded in GO cellular-component terms inline and there is no proposals/ directory. Adopting applies once a structure phenotype needs a METPO term GO does not carry.","reason_claims":{"absent":["proposals"]}},"kgx_export":{"status":"disabled","reason":"Four structure records and no exporter; adopting KGX applies once the corpus grows."},"source_queue":{"status":"enabled","settings":{"queue_path":"curation/source_queue.tsv","extensions":["taxon_link","item_id","script"],"required_when_adopted":["script"]}},"site_contract":{"status":"enabled","settings":{"site_path":"pages","published_root":"."}},"source_catalogue":{"status":"disabled","reason":"The repository keeps its ranked source list as curation/source_queue.tsv, machine-checked by scripts/check_source_queue.py inside its qc gate, rather than a download.yaml in the fleet's catalogue shape; there is no download.yaml to parse. Converging on one shape is open.","reason_claims":{"present":["curation/source_queue.tsv","scripts/check_source_queue.py"],"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped-ingredient inventory reads culture-media and ingredient corpora; CellStructureMech curates cell structures and has no ingredient records, so scripts/inventory_unmapped_ingredients.py defines no loader for it.","reason_claims":{"present":["claw:scripts/inventory_unmapped_ingredients.py"]}}}},"HabitatMech":{"key":"habitatmech","github":"CultureBotAI/HabitatMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"disabled","reason":"Has research, research-dry and deep-research-canary recipes, a research/ tree and the vendored scripts/deep_research_contract.py, but no conf/deep_research_provider.yaml -- the profile every deep-research Mech declares and the contract resolves. Enabled on the recipes alone this would assert a profile that does not exist.","reason_claims":{"present":["research","scripts/deep_research_contract.py"],"absent":["conf/deep_research_provider.yaml"]}},"edison_key_discovery":{"status":"not_applicable","reason":"HabitatMech does not use an Edison research-provider key; its research recipes run through its own provider surface."},"environment_coverage":{"status":"disabled","reason":"HabitatMech is itself an environment vocabulary: 3,213 habitat records grounded in ENVO, UBERON, FOODON and BTO. Environment coverage compares culture media, ingredients and communities against ENVO and has no loader for HabitatRecord, so it cannot yet read this corpus as either an input or the reference set. Adopting it applies here and is the more valuable direction: teach environment_coverage_dashboard.py to treat habitat records as the reference the other corpora are measured against.","reason_claims":{"present":["claw:scripts/environment_coverage_dashboard.py"]}},"knowledge_gap_scan":{"status":"disabled","reason":"Records carry the shared Discussion section, so the scan applies. The workflow matrix is generated from this manifest, so enabling the capability here with a settings.window is what adds the repository to it. Left disabled until HabitatMech has run the scan once locally and chosen its window."},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["habitat_category","grounding_status","mapping_status"]}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"graph_list","record_id_field":"identifier","anchor_node_types":["HABITAT"],"duplicate_grounding_check":true,"exempt_when":["grounding_status=NOT_APPLICABLE","mapping_status=DEPRECATED"],"strata":["grounding_status","habitat_category"]}},"page_budgets":{"status":"disabled","reason":"Serves 3,404 published HTML pages under pages/ straight from main via GitHub Pages -- it has no generate-pages.yaml -- and declares no size or file-count budgets, so nothing watches them grow. Adopting them applies here; the limits are the repository's to set.","reason_claims":{"present":["pages"],"absent":[".github/workflows/generate-pages.yaml"]}},"writer_audit":{"status":"disabled","reason":"Has no scripts/audit_writers.py. Its writers exist (write_validated_habitat and record_curation_event in the seeder) and records are seeded as build products, so there is drift to audit; adopting it applies here once the audit is written.","reason_claims":{"absent":["scripts/audit_writers.py"]}},"sssom_export":{"status":"disabled","reason":"Grounds each habitat inline on the record (ENVO, UBERON, FOODON, BTO) and keeps its ontology requests as curation/term_requests.tsv rather than publishing a mapping set; there is no SSSOM file for this contract to judge. Adopting one would apply here.","reason_claims":{"present":["curation/term_requests.tsv"]}},"metpo_proposal":{"status":"disabled","reason":"Habitats are grounded in ENVO and the repository raises its gaps through term requests rather than METPO cohorts, so it has no proposals directory. Adopting applies once a habitat-associated phenotype needs a METPO term.","reason_claims":{"absent":["proposals"]}},"kgx_export":{"status":"disabled","reason":"Consumes kg-microbe's KGX as an input -- conf/sources.yaml names the checkout that supplies ENVO, UBERON, FOODON and BTO -- and publishes habitat records, not a graph. Adopting KGX would apply here only if it starts emitting nodes and edges.","reason_claims":{"present":["conf/sources.yaml"]}},"source_queue":{"status":"disabled","reason":"Has no curation/source_queue.tsv; its sources are declared in conf/sources.yaml and the raw payloads in data/raw/MANIFEST.yaml. AntibioticMech wrote the pattern and CellStructureMech adapted it; adopting it here means ranking candidate habitat sources and verifying their licences, which is curation work rather than a file copy.","reason_claims":{"present":["conf/sources.yaml","data/raw/MANIFEST.yaml"],"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"disabled","reason":"Publishes 3,404 HTML pages under pages/ straight from main, so the check has a directory to judge, but it has not been measured on this site yet. Enable after measuring on joining, as AntibioticMech did, so the contract's numbers keep describing what it runs on.","reason_claims":{"present":["pages"]}},"source_catalogue":{"status":"disabled","reason":"Declares its sources in conf/sources.yaml and the fetched payloads in data/raw/MANIFEST.yaml rather than a download.yaml in the fleet's catalogue shape; there is no download.yaml to parse. Converging on one shape is open.","reason_claims":{"present":["conf/sources.yaml","data/raw/MANIFEST.yaml"],"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped-ingredient inventory reads culture-media and ingredient corpora; HabitatMech curates habitats and has no ingredient records, so scripts/inventory_unmapped_ingredients.py defines no loader for it.","reason_claims":{"present":["claw:scripts/inventory_unmapped_ingredients.py"]}}}},"NaturalProductMech":{"key":"naturalproductmech","github":"CultureBotAI/NaturalProductMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"disabled","reason":"Vendors the governed curation-history schema and carries a new-history recipe, but has no history directory yet, so no record can append an event. Adopting applies once the tree exists and the recipe is wired into CI.","reason_claims":{"absent":["history"]}},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"disabled","reason":"No conf/deep_research_provider.yaml and no research recipe; sources are assessed through the source queue. Adopting applies once a provider profile exists under claw's contract.","reason_claims":{"absent":["conf/deep_research_provider.yaml"]}},"edison_key_discovery":{"status":"not_applicable","reason":"NaturalProductMech does not use an Edison research-provider key; it has no research provider integration at all."},"environment_coverage":{"status":"not_applicable","reason":"Environment coverage compares culture media, ingredients and microbial communities. A natural-product structure corpus is not one of those inputs."},"knowledge_gap_scan":{"status":"disabled","reason":"Records do not carry the shared Discussion section the scan reads, and this repository is not in the knowledge-gap-scan workflow matrix. Enable once records carry it."},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["np_pathway","np_classification","grounding_status","curation_status"]}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"graph_list","record_id_field":"identifier","node_grounding_field":"identifier","graph_facets":["scope"],"anchor_node_types":["COMPOUND"],"duplicate_grounding_check":true,"exempt_when":["curation_status=DEPRECATED"],"strata":["np_pathway"]}},"page_budgets":{"status":"disabled","reason":"Serves tracked pages under pages/ straight from main via GitHub Pages and declares no size or file-count budgets, so no conf/pages_budgets.json exists for the audit to read.","reason_claims":{"present":["pages"],"absent":["conf/pages_budgets.json"]}},"writer_audit":{"status":"disabled","reason":"Has no scripts/audit_writers.py, so there is no drift between writer copies to remove yet. Adopting it applies here once the corpus is edited by more than one writer.","reason_claims":{"absent":["scripts/audit_writers.py"]}},"sssom_export":{"status":"disabled","reason":"Records carry ChEBI, NPAtlas and PubChem identifiers inline rather than through a mapping file. Adopting SSSOM applies once a mapping product exists."},"metpo_proposal":{"status":"disabled","reason":"No proposals directory and no METPO grounding; structures are grounded in ChEBI. Adopting applies once a natural-product phenotype needs a METPO term.","reason_claims":{"absent":["proposals"]}},"kgx_export":{"status":"disabled","reason":"No exporter and no graph product yet; adopting KGX applies once the corpus is consumed as a graph."},"source_queue":{"status":"enabled","settings":{"queue_path":"curation/source_queue.tsv","extensions":["structures"]}},"site_contract":{"status":"enabled","settings":{"site_path":"pages"}},"source_catalogue":{"status":"disabled","reason":"Keeps its ranked source list as curation/source_queue.tsv and fetches each adopted source through its own extract recipe; there is no download.yaml for the catalogue check to read. Adopting means deriving the machine-fetchable half from the queue.","reason_claims":{"present":["curation/source_queue.tsv"],"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped inventory reconciles ingredient names across media corpora; natural-product structures are not one of its inputs."}}},"TaxonMech":{"key":"taxonmech","github":"CultureBotAI/TaxonMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"disabled","reason":"Vendors scripts/deep_research_contract.py but has no conf/deep_research_provider.yaml or provider recipe. Enable once a research provider is configured and exercised under the shared contract.","reason_claims":{"present":["scripts/deep_research_contract.py"],"absent":["conf/deep_research_provider.yaml"]}},"edison_key_discovery":{"status":"not_applicable","reason":"TaxonMech has no Edison integration or Edison research-provider key."},"environment_coverage":{"status":"not_applicable","reason":"Environment coverage compares culture media, ingredients and microbial communities; taxon identity records are not one of its inputs."},"knowledge_gap_scan":{"status":"disabled","reason":"The schema supports Discussion but no shared scan window or workflow is configured. Enable after adding a durable curated overlay that the generated-corpus pipeline preserves and wiring the scanner to it."},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["taxon_domain","rank","grounding_status","mapping_status"]}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"graph_list","record_id_field":"identifier","anchor_node_types":["TAXON"],"duplicate_grounding_check":true,"exempt_when":["mapping_status=DEPRECATED","grounding_status=NOT_APPLICABLE"],"strata":["rank","taxon_domain"]}},"page_budgets":{"status":"disabled","reason":"Publishes tracked pages under pages/ but has no conf/pages_budgets.json. Enable once explicit size and file-count budgets are configured and measured.","reason_claims":{"present":["pages"],"absent":["conf/pages_budgets.json"]}},"writer_audit":{"status":"disabled","reason":"Has no scripts/audit_writers.py. Records use a native seeder and validated writer, but no shared audit profile has been adopted. Enable after configuring the profile and measuring its writer coverage.","reason_claims":{"absent":["scripts/audit_writers.py"]}},"sssom_export":{"status":"disabled","reason":"Stores taxonomy mappings and cross-references inline; no SSSOM mapping product is emitted. Enable once a validated export exists."},"metpo_proposal":{"status":"disabled","reason":"The schema references METPO but there is no proposals/ directory or proposal cohort. Enable once the repository produces terms under the shared proposal contract.","reason_claims":{"absent":["proposals"]}},"kgx_export":{"status":"disabled","reason":"Consumes kg-microbe KGX as an input but does not emit a graph product. Enable when an exporter produces validated nodes and edges."},"source_queue":{"status":"disabled","reason":"Sources are configured in conf/sources.yaml and inventoried in data/raw/MANIFEST.yaml; no curation/source_queue.tsv ranks candidate sources. Enable once that review queue is adopted.","reason_claims":{"present":["conf/sources.yaml","data/raw/MANIFEST.yaml"],"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"enabled","settings":{"site_path":"pages"}},"source_catalogue":{"status":"disabled","reason":"Uses conf/sources.yaml and data/raw/MANIFEST.yaml but has no download.yaml in the shared catalogue shape. Enable after adapting the source declarations to that contract.","reason_claims":{"present":["conf/sources.yaml","data/raw/MANIFEST.yaml"],"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped inventory reconciles ingredient names across media corpora; taxon identity records are not one of its inputs."}}},"PathwayMech":{"key":"pathwaymech","github":"CultureBotAI/PathwayMech","capabilities":{"id_label_validation":{"status":"disabled","reason":"Every taxon, participant and reaction pairs a CURIE with a label (CHEBI, NCBITaxon, RHEA, EC, SGD and others), so the check applies. The vendored scripts/validate_id_label_correspondence.py is present, but nothing runs it over the records: there is no conf/id_label_targets.yaml telling it which id and label slots to read, and its only callers are the vendored tests, on synthetic fixtures. Enable once it runs over data/pathways/ on every pull request.","reason_claims":{"present":["data/pathways","scripts/validate_id_label_correspondence.py"],"absent":["conf/id_label_targets.yaml"]}},"curation_history":{"status":"disabled","reason":"No record carries curation history yet. The governed src/pathwaymech/schema/history.yaml is vendored and records may carry an optional curation_history of CurationEvent, but no recipe appends events and nothing in CI validates history records; history/ holds only a README. Enable once a recipe appends events, checked in CI (#515).","reason_claims":{"present":["history","src/pathwaymech/schema/history.yaml"]}},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"disabled","reason":"Research so far is source-discovery notes under research/; there is no conf/deep_research_provider.yaml and no provider recipe. The vendored scripts/deep_research_contract.py is present but nothing runs it; the pathwaymech-deep-research-contract command is a separate, local report-heading checker. Enable once a provider is configured and exercised under the shared contract.","reason_claims":{"present":["research","scripts/deep_research_contract.py"],"absent":["conf/deep_research_provider.yaml"]}},"edison_key_discovery":{"status":"not_applicable","reason":"PathwayMech has no Edison integration or Edison research-provider key."},"environment_coverage":{"status":"not_applicable","reason":"Environment coverage compares culture media, ingredients and microbial communities. Pathway mechanism records carry organism scope as NCBITaxon and no environment terms, so they are not one of its inputs."},"knowledge_gap_scan":{"status":"disabled","reason":"Records have no Discussion slot: the closed schema in src/pathwaymech/schema/pathwaymech.yaml declares none, so there are no Discussions to index, and the block the scan appends under --apply would fail strict validation. There is also no conf/kgscan_config.yaml or scan recipe. The records are curated mechanisms with edge-level evidence, so the scan applies; enable once the schema declares Discussions and a window has been chosen.","reason_claims":{"present":["src/pathwaymech/schema/pathwaymech.yaml"],"absent":["conf/kgscan_config.yaml"]}},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["pathway_type","taxa.id"]}},"page_budgets":{"status":"disabled","reason":"Publishes pages/, rendered from the records (152 files, 385 KB at admission), through a site-only Pages deploy, but declares no size or file-count budgets, so there is no conf/pages_budgets.json for the audit to read. The limits are the repository's to set.","reason_claims":{"present":["pages"],"absent":["conf/pages_budgets.json"]}},"kgx_export":{"status":"enabled","settings":{"nodes_path":"output/kgx/nodes.tsv","edges_path":"output/kgx/edges.tsv","extra_prefixes":["pathwaymech"]}},"writer_audit":{"status":"disabled","reason":"Has no scripts/audit_writers.py, and no tracked script writes a record: the importers print to stdout, either YAML drafts or TSV seed rows. Adopting it applies once a script writes records; the settings are the repository's to declare.","reason_claims":{"absent":["scripts/audit_writers.py"]}},"sssom_export":{"status":"enabled","settings":{"mapping_globs":["output/sssom/*.sssom.tsv"]}},"metpo_proposal":{"status":"disabled","reason":"No proposals/ directory and no METPO grounding; pathways are identified by GO-CAM model, MetaCyc and WikiPathways identifiers. Adopting applies once a pathway-level phenotype needs a METPO term.","reason_claims":{"absent":["proposals"]}},"source_queue":{"status":"disabled","reason":"Has no curation/source_queue.tsv; its source-triage skill ranks candidates by priority in conf/sources.yaml, with evidence under research/source_discovery/. Adopting the queue means recording each source's licence verification and adoption date.","reason_claims":{"present":["conf/sources.yaml","research/source_discovery"],"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"enabled","settings":{"site_path":"pages"}},"source_catalogue":{"status":"disabled","reason":"Declares its sources in conf/sources.yaml, whose rows carry priority, ingest status, role and homepage but no per-file url or licence, and imports local exports; there is no download.yaml in the fleet's catalogue shape. Adopting applies once each source has its fetchable, licensed half.","reason_claims":{"present":["conf/sources.yaml"],"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped-ingredient inventory reads culture-media and ingredient corpora; pathway participants are metabolites, enzymes and gene products rather than medium ingredients, so scripts/inventory_unmapped_ingredients.py defines no loader for it.","reason_claims":{"present":["claw:scripts/inventory_unmapped_ingredients.py"]}},"causal_graph_coverage":{"status":"disabled","reason":"Every record is one causal graph: CURIE nodes in the record-level taxa, participants and reactions lists plus the record itself, and one record-level mechanistic_edges list. That is neither graph_list nor node_nested_edges, so the coverage reader would report no record covered. Enable once the reader has a record-level shape."}}}},"artifact_count":20}; + var MANIFEST = {"version":1,"source":{"repository":"CultureBotAI/culturebotai-claw","revision":"73958edb97994bc16c5404443956ee64c47bfe9b","url":"https://github.com/CultureBotAI/culturebotai-claw/blob/73958edb97994bc16c5404443956ee64c47bfe9b/src/kg_microbe_fleet/fleet.yaml"},"capability_catalogue":{"id_label_validation":{},"curation_history":{},"strict_validation":{},"schema_sync":{},"release_management":{},"build_coordination":{},"documentation":{},"testing":{},"refactoring":{},"coordination_hooks":{},"deep_research":{},"edison_key_discovery":{},"environment_coverage":{"settings":{"record_globs":{"type":"string_list","required_when_enabled":true}}},"knowledge_gap_scan":{"settings":{"scheduled":{"type":"boolean"},"window":{"type":"integer","required_when_enabled":true,"minimum":1}}},"vendored_sync":{},"unmapped_inventory_input":{},"source_catalogue":{},"corpus_statistics":{"settings":{"fields":{"type":"string_list","required_when_enabled":true}}},"causal_graph_coverage":{"settings":{"graph_shape":{"type":"string","required_when_enabled":true},"graphs_field":{"type":"string"},"graph_id_field":{"type":"string"},"nodes_field":{"type":"string"},"edges_field":{"type":"string"},"node_id_field":{"type":"string"},"node_type_field":{"type":"string"},"node_grounding_field":{"type":"string"},"edge_subject_field":{"type":"string"},"edge_object_field":{"type":"string"},"edge_predicate_field":{"type":"string"},"edge_evidence_field":{"type":"string"},"record_id_field":{"type":"string"},"scope_field":{"type":"string"},"mechanistic_scopes":{"type":"string_list"},"graph_facets":{"type":"string_list"},"anchor_node_types":{"type":"string_list"},"duplicate_grounding_check":{"type":"boolean"},"exempt_when":{"type":"string_list"},"strata":{"type":"string_list"}}},"page_budgets":{"settings":{"site_path":{"type":"string","required_when_enabled":true},"budgets_path":{"type":"string","required_when_enabled":true}}},"kgx_export":{"settings":{"nodes_path":{"type":"string","required_when_enabled":true},"edges_path":{"type":"string","required_when_enabled":true},"extra_prefixes":{"type":"string_list"}}},"source_queue":{"settings":{"queue_path":{"type":"string","required_when_enabled":true},"extensions":{"type":"string_list"},"required_when_adopted":{"type":"string_list"}}},"metpo_proposal":{"settings":{"class_glob":{"type":"string","required_when_enabled":true},"property_glob":{"type":"string"}}},"sssom_export":{"settings":{"mapping_globs":{"type":"string_list","required_when_enabled":true},"extensions":{"type":"string_list"}}},"writer_audit":{"settings":{"search_dirs":{"type":"string_list","required_when_enabled":true},"save_helpers":{"type":"string_list"},"validators":{"type":"string_list"},"curation_markers":{"type":"string_list"},"exclude":{"type":"string_list"}}},"site_contract":{"settings":{"site_path":{"type":"string","required_when_enabled":true},"published_root":{"type":"string"},"allowed_hosts":{"type":"string_list"}}}},"mechs":{"CultureMech":{"key":"culturemech","github":"CultureBotAI/CultureMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"enabled"},"edison_key_discovery":{"status":"enabled"},"environment_coverage":{"status":"enabled","settings":{"record_globs":["data/merge_yaml/merged/*.yaml"]}},"knowledge_gap_scan":{"status":"enabled","settings":{"window":300}},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["source_environment","medium_type"]}},"causal_graph_coverage":{"status":"not_applicable","reason":"MediaRecipe records are compositions. The schema has no causal-graph slot and no record carries graph-shaped content; what CultureMech's own tooling calls causal-graph coverage (#468) is its review-need score over recipe grounding, not a graph."},"page_budgets":{"status":"disabled","reason":"Generates a site through .github/workflows/generate-pages.yaml but declares no size or file-count budgets, so nothing watches it grow. Adopting them applies here; the limits are the repository's to set.","reason_claims":{"present":[".github/workflows/generate-pages.yaml"]}},"writer_audit":{"status":"enabled","settings":{"search_dirs":["scripts","src/culturemech"],"save_helpers":["write_validated_recipe"],"exclude":["scripts/audit_writers.py"]}},"sssom_export":{"status":"enabled","settings":{"mapping_globs":["output/*.sssom.tsv"],"extensions":["mapping_method"]}},"metpo_proposal":{"status":"disabled","reason":"Carries .claude/commands/ground-or-propose-metpo.md, so the grounding half is present, but has no proposals/ directory and has never minted a METPO id. Adopting applies once a CultureMech term needs one.","reason_claims":{"absent":["proposals"],"present":[".claude/commands/ground-or-propose-metpo.md"]}},"kgx_export":{"status":"disabled","reason":"scripts/export_kgx.py writes to output/kgx but has produced nothing tracked, so there is no graph for this contract to judge. Adopting it means running the exporter first; the check applies here once it does.","reason_claims":{"present":["scripts/export_kgx.py"],"absent":["output/kgx"]}},"source_queue":{"status":"disabled","reason":"Has no curation/source_queue.tsv. AntibioticMech wrote the pattern and CellStructureMech adapted it; adopting it here means ranking this corpus's own candidate sources and verifying their licences, which is curation work rather than a file copy.","reason_claims":{"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"disabled","reason":"Publishes a site built in CI, so no directory in the checkout is the output the check would judge; running it on the Jekyll or template sources reports missing .html files that the build creates. Adopting it means running the check on the build product, which applies here and is not yet wired."},"source_catalogue":{"status":"disabled","reason":"Fetches each source from its own script -- scripts/fetch_komodo_base_volumes.py, scripts/fetch_mediadive_solution_volumes.py, scripts/fetch_pubmed_abstracts.py -- with no download.yaml declaring them, so there is no catalogue to validate. Adopting one would apply here; it has not been written.","reason_claims":{"present":["scripts/fetch_komodo_base_volumes.py","scripts/fetch_mediadive_solution_volumes.py","scripts/fetch_pubmed_abstracts.py"],"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"enabled"}}},"MediaIngredientMech":{"key":"mediaingredientmech","github":"CultureBotAI/MediaIngredientMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"enabled"},"edison_key_discovery":{"status":"enabled"},"environment_coverage":{"status":"enabled","settings":{"record_globs":["data/ingredients/**/*.yaml"]}},"knowledge_gap_scan":{"status":"enabled","settings":{"window":300}},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["ingredient_type","ontology_mapping.mapping_quality"]}},"causal_graph_coverage":{"status":"disabled","reason":"IngredientRecord has no causal-graph slot. Its role facets and components are typed assertions around one ingredient, a star with nothing to connect, and scripts/score_causal_graph_readiness.py ranks their readiness to seed a graph. Enable once records carry graphs.","reason_claims":{"present":["scripts/score_causal_graph_readiness.py"]}},"page_budgets":{"status":"disabled","reason":"Generates a site through .github/workflows/generate-pages.yaml but declares no size or file-count budgets, so nothing watches it grow. Adopting them applies here; the limits are the repository's to set.","reason_claims":{"present":[".github/workflows/generate-pages.yaml"]}},"writer_audit":{"status":"enabled","settings":{"search_dirs":["scripts","src/mediaingredientmech"],"save_helpers":["save_yaml","write_validated_ingredient"],"exclude":["scripts/audit_writers.py"]}},"sssom_export":{"status":"enabled","settings":{"mapping_globs":["mappings/*.sssom.tsv"],"extensions":["source","validation_method"]}},"metpo_proposal":{"status":"not_applicable","reason":"MIM grounds ingredients in ChEBI and FOODON and publishes SSSOM mappings; METPO models microbial phenotypes and processes, which is not the axis this corpus curates."},"kgx_export":{"status":"disabled","reason":"Publishes term mappings rather than a graph; its contribution to kg-microbe is SSSOM. Adopting KGX would apply here only if it starts emitting nodes and edges."},"source_queue":{"status":"disabled","reason":"Has no curation/source_queue.tsv. AntibioticMech wrote the pattern and CellStructureMech adapted it; adopting it here means ranking this corpus's own candidate sources and verifying their licences, which is curation work rather than a file copy.","reason_claims":{"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"disabled","reason":"Publishes a site built in CI, so no directory in the checkout is the output the check would judge; running it on the Jekyll or template sources reports missing .html files that the build creates. Adopting it means running the check on the build product, which applies here and is not yet wired."},"source_catalogue":{"status":"disabled","reason":"Fetches ontologies through download_ontologies.py rather than a declared catalogue, so there is no download.yaml to validate. Adopting one would apply here; it has not been written.","reason_claims":{"present":["scripts/download_ontologies.py"],"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"enabled"}}},"CommunityMech":{"key":"communitymech","github":"CultureBotAI/CommunityMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"enabled"},"edison_key_discovery":{"status":"enabled"},"environment_coverage":{"status":"enabled","settings":{"record_globs":["data/isolates/*.yaml"]}},"knowledge_gap_scan":{"status":"enabled","settings":{"window":305}},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["environment_term"]}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"node_nested_edges","nodes_field":"ecological_interactions","node_id_field":"name","node_type_field":"interaction_type","edges_field":"downstream","edge_object_field":"target","strata":["community_origin","@directory"]}},"page_budgets":{"status":"disabled","reason":"Generates a site through .github/workflows/generate-pages.yaml but declares no size or file-count budgets, so nothing watches it grow. Adopting them applies here; the limits are the repository's to set.","reason_claims":{"present":[".github/workflows/generate-pages.yaml"]}},"writer_audit":{"status":"enabled","settings":{"search_dirs":["scripts","src/communitymech"],"save_helpers":["write_validated_community"],"curation_markers":["record_curation_event"],"exclude":["scripts/audit_writers.py"]}},"sssom_export":{"status":"not_applicable","reason":"Publishes KGX nodes and edges rather than term mappings; its contribution to kg-microbe is a graph, not a mapping set, so there is no SSSOM file for this contract to judge."},"metpo_proposal":{"status":"enabled","settings":{"class_glob":"proposals/*/metpo_proposal_classes_robot.tsv","property_glob":"proposals/*/metpo_proposal_properties_robot.tsv"}},"kgx_export":{"status":"enabled","settings":{"nodes_path":"output/kgx/nodes.tsv","edges_path":"output/kgx/edges.tsv"}},"source_queue":{"status":"disabled","reason":"Has no curation/source_queue.tsv. AntibioticMech wrote the pattern and CellStructureMech adapted it; adopting it here means ranking this corpus's own candidate sources and verifying their licences, which is curation work rather than a file copy.","reason_claims":{"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"enabled","settings":{"site_path":"docs"}},"source_catalogue":{"status":"disabled","reason":"Has no download.yaml; its inputs arrive through per-source scripts rather than a declared catalogue. Adopting one would apply here; it has not been written.","reason_claims":{"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"enabled"}}},"TraitMech":{"key":"traitmech","github":"CultureBotAI/TraitMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"enabled"},"edison_key_discovery":{"status":"enabled"},"environment_coverage":{"status":"not_applicable","reason":"Environment coverage currently compares culture media, ingredients, and microbial communities; trait records are not an environment inventory input."},"knowledge_gap_scan":{"status":"enabled","settings":{"window":300}},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["mapping_status","trait_category"]}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"graph_list","record_id_field":"identifier","scope_field":"scope_status","mechanistic_scopes":["MECHANISTIC"],"anchor_node_types":["TRAIT"],"duplicate_grounding_check":true,"exempt_when":["mapping_status=DEPRECATED","term_kind=OBJECT_PROPERTY|DATATYPE_PROPERTY","trait_category=UPPER"],"strata":["mapping_status","trait_category"]}},"page_budgets":{"status":"disabled","reason":"Serves 490 tracked pages under pages/ straight from main via GitHub Pages -- it has no generate-pages.yaml, unlike the other four -- and declares no size or file-count budgets, so nothing watches them grow. Adopting them applies here; the limits are the repository's to set.","reason_claims":{"present":["pages"],"absent":[".github/workflows/generate-pages.yaml"]}},"writer_audit":{"status":"enabled","settings":{"search_dirs":["scripts","src/traitmech"],"save_helpers":["write_validated_trait"],"curation_markers":["record_curation"],"exclude":["scripts/audit_writers.py"]}},"sssom_export":{"status":"enabled","settings":{"mapping_globs":["proposals/*/metpo_proposal_mappings.sssom.tsv"]}},"metpo_proposal":{"status":"enabled","settings":{"class_glob":"proposals/*/metpo_proposal_classes_robot.tsv","property_glob":"proposals/*/metpo_proposal_properties_robot.tsv"}},"kgx_export":{"status":"disabled","reason":"Publishes trait records and METPO mapping proposals, not a KGX graph."},"source_queue":{"status":"disabled","reason":"Has no curation/source_queue.tsv. AntibioticMech wrote the pattern and CellStructureMech adapted it; adopting it here means ranking this corpus's own candidate sources and verifying their licences, which is curation work rather than a file copy.","reason_claims":{"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"enabled","settings":{"site_path":"pages","published_root":".","allowed_hosts":["cdn.jsdelivr.net"]}},"source_catalogue":{"status":"enabled"},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped-ingredient inventory reads culture-media and ingredient corpora; TraitMech curates traits and has no ingredient records, so scripts/inventory_unmapped_ingredients.py defines no loader for it.","reason_claims":{"present":["claw:scripts/inventory_unmapped_ingredients.py"]}}}},"ProteinTraitsMech":{"key":"proteintraitsmech","github":"CultureBotAI/proteintraitsmech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"enabled"},"edison_key_discovery":{"status":"not_applicable","reason":"ProteinTraitsMech does not use an Edison research-provider key; provider integration is configured through its own supported credential surfaces."},"environment_coverage":{"status":"not_applicable","reason":"Environment coverage currently compares culture media, ingredients, and microbial communities; protein-trait records are not an environment inventory input."},"knowledge_gap_scan":{"status":"not_applicable","reason":"Record-level knowledge-gap scanning targets curated per-record discussion text. This corpus is ontology-derived, so there is no per-record gap surface to scan; the repository is correspondingly absent from the knowledge-gap-scan workflow matrix."},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["trait_axis","mapping_status"]}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"graph_list","record_id_field":"identifier","exempt_when":["mapping_status=DEPRECATED","path:data/traits/function/enzymatic_activity/metpo/*.yaml"],"strata":["trait_axis","@directory"]}},"page_budgets":{"status":"enabled","settings":{"site_path":"_site","budgets_path":"conf/pages_budgets.json"}},"writer_audit":{"status":"not_applicable","reason":"Its scripts/audit_writers.py shares the name and nothing else -- a different tool built on registered editors and guard tests, ~600 lines apart from the other four. This audit does not describe what that one checks, and consolidating them would mean choosing one model over the other rather than removing a duplicate.","reason_claims":{"present":["scripts/audit_writers.py"]}},"sssom_export":{"status":"disabled","reason":"Grounds protein traits directly in its own records rather than publishing a mapping set. Adopting one would apply here; none has been written."},"metpo_proposal":{"status":"disabled","reason":"Carries METPO-grounded records under data/traits/**/metpo/, so it consumes METPO, but proposes no new terms and has no proposals/ directory. Adopting applies once a protein trait needs a term METPO lacks.","reason_claims":{"absent":["proposals"]}},"kgx_export":{"status":"disabled","reason":"Publishes protein-trait records rather than a graph."},"source_queue":{"status":"disabled","reason":"Has no curation/source_queue.tsv. AntibioticMech wrote the pattern and CellStructureMech adapted it; adopting it here means ranking this corpus's own candidate sources and verifying their licences, which is curation work rather than a file copy.","reason_claims":{"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"disabled","reason":"Publishes a site built in CI, so no directory in the checkout is the output the check would judge; running it on the Jekyll or template sources reports missing .html files that the build creates. Adopting it means running the check on the build product, which applies here and is not yet wired."},"source_catalogue":{"status":"enabled"},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped-ingredient inventory reads culture-media and ingredient corpora; ProteinTraitsMech curates protein-trait records and has no ingredient corpus, so scripts/inventory_unmapped_ingredients.py defines no loader for it.","reason_claims":{"present":["claw:scripts/inventory_unmapped_ingredients.py"]}}}},"AntibioticMech":{"key":"antibioticmech","github":"CultureBotAI/AntibioticMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"vendored_sync":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"testing":{"status":"enabled"},"documentation":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"disabled","reason":"Has research-antibiotic, research-entity and deep-research-canary recipes and a research/ tree, but no conf/deep_research_provider.yaml -- the profile every deep-research Mech declares and the contract resolves. Enabled on the recipes alone this would assert a profile that does not exist; the recipes are a research route, not the declared provider contract.","reason_claims":{"present":["research"],"absent":["conf/deep_research_provider.yaml"]}},"edison_key_discovery":{"status":"not_applicable","reason":"Research runs through this repository's own research-antibiotic and research-entity recipes; it uses no Edison provider key."},"environment_coverage":{"status":"not_applicable","reason":"Environment coverage compares culture media, ingredients and microbial communities. An antimicrobial-compound corpus is not an environment inventory input."},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped inventory reconciles ingredient names across media corpora; antimicrobial compounds are not one of its sources."},"knowledge_gap_scan":{"status":"disabled","reason":"Records do not carry the shared Discussion section the scan reads, and this repository is not in the knowledge-gap-scan workflow matrix. Enable once records carry it."},"source_catalogue":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["antimicrobial_class","grounding_status"]}},"source_queue":{"status":"enabled","settings":{"queue_path":"curation/source_queue.tsv"}},"site_contract":{"status":"enabled","settings":{"site_path":"pages"}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"graph_list","record_id_field":"identifier","scope_field":"scope_status","mechanistic_scopes":["MECHANISTIC"],"anchor_node_types":["COMPOUND"],"duplicate_grounding_check":true,"exempt_when":["curation_status=DEPRECATED"],"strata":["antimicrobial_class","curation_status"]}},"page_budgets":{"status":"disabled","reason":"Serves tracked pages under pages/ from main via GitHub Pages and declares no size or file-count budgets, so nothing watches them grow -- 2,956 files and 30.1 MB measured at admission (#230). Adopting them applies here; the limits are this repository's to set.","reason_claims":{"present":["pages"]}},"writer_audit":{"status":"disabled","reason":"Has no scripts/audit_writers.py, so there is no drift between writer copies to remove yet. Adopting it applies once more writers exist.","reason_claims":{"absent":["scripts/audit_writers.py"]}},"sssom_export":{"status":"disabled","reason":"Records carry ChEBI and ARO identifiers inline rather than through a mapping file. Adopting SSSOM applies once a mapping product exists."},"metpo_proposal":{"status":"disabled","reason":"No proposals/ directory and no METPO grounding. Antimicrobial compounds are grounded in ChEBI and ARO inline; adopting applies once a resistance or activity phenotype needs a METPO term.","reason_claims":{"absent":["proposals"]}},"kgx_export":{"status":"disabled","reason":"No exporter and no graph product yet; adopting KGX applies once the corpus is consumed as a graph."}}},"CellStructureMech":{"key":"cellstructuremech","github":"CultureBotAI/CellStructureMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"disabled","reason":"Research so far is source assessment written by hand under research/ with no provider client or research recipe in the justfile; the repository has not decided on a paid research route.","reason_claims":{"present":["research"]}},"edison_key_discovery":{"status":"not_applicable","reason":"CellStructureMech does not use an Edison research-provider key; it has no research provider integration at all."},"environment_coverage":{"status":"not_applicable","reason":"Environment coverage currently compares culture media, ingredients, and microbial communities; cell-structure records are not an environment inventory input."},"knowledge_gap_scan":{"status":"disabled","reason":"Records carry the shared Discussion section, so the scan applies, but the corpus is four records and the repository is not yet in the knowledge-gap-scan workflow matrix; enable once the first tranche of records lands (CellStructureMech#12)."},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["structure_category","mapping_status"]}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"graph_list","record_id_field":"identifier","scope_field":"scope_status","mechanistic_scopes":["MECHANISTIC"],"graph_facets":["graph_kind"],"anchor_node_types":["STRUCTURE"],"exempt_when":["mapping_status=DEPRECATED"],"strata":["structure_category","structure_kind"]}},"page_budgets":{"status":"disabled","reason":"Serves tracked pages under pages/ straight from main via GitHub Pages -- it has no generate-pages.yaml -- and declares no size or file-count budgets, so nothing watches them grow. Adopting them applies here; the limits are the repository's to set.","reason_claims":{"present":["pages"],"absent":[".github/workflows/generate-pages.yaml"]}},"writer_audit":{"status":"disabled","reason":"Has no scripts/audit_writers.py, so there is no drift to remove yet. Adopting it applies here once the corpus grows; the settings are the repository's to declare.","reason_claims":{"absent":["scripts/audit_writers.py"]}},"sssom_export":{"status":"disabled","reason":"Records carry GO cellular-component identifiers inline rather than through a mapping file, and the corpus is four records. Adopting one applies once it grows."},"metpo_proposal":{"status":"disabled","reason":"Structures are grounded in GO cellular-component terms inline and there is no proposals/ directory. Adopting applies once a structure phenotype needs a METPO term GO does not carry.","reason_claims":{"absent":["proposals"]}},"kgx_export":{"status":"disabled","reason":"Four structure records and no exporter; adopting KGX applies once the corpus grows."},"source_queue":{"status":"enabled","settings":{"queue_path":"curation/source_queue.tsv","extensions":["taxon_link","item_id","script"],"required_when_adopted":["script"]}},"site_contract":{"status":"enabled","settings":{"site_path":"pages","published_root":"."}},"source_catalogue":{"status":"disabled","reason":"The repository keeps its ranked source list as curation/source_queue.tsv, machine-checked by scripts/check_source_queue.py inside its qc gate, rather than a download.yaml in the fleet's catalogue shape; there is no download.yaml to parse. Converging on one shape is open.","reason_claims":{"present":["curation/source_queue.tsv","scripts/check_source_queue.py"],"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped-ingredient inventory reads culture-media and ingredient corpora; CellStructureMech curates cell structures and has no ingredient records, so scripts/inventory_unmapped_ingredients.py defines no loader for it.","reason_claims":{"present":["claw:scripts/inventory_unmapped_ingredients.py"]}}}},"HabitatMech":{"key":"habitatmech","github":"CultureBotAI/HabitatMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"disabled","reason":"Has research, research-dry and deep-research-canary recipes, a research/ tree and the vendored scripts/deep_research_contract.py, but no conf/deep_research_provider.yaml -- the profile every deep-research Mech declares and the contract resolves. Enabled on the recipes alone this would assert a profile that does not exist.","reason_claims":{"present":["research","scripts/deep_research_contract.py"],"absent":["conf/deep_research_provider.yaml"]}},"edison_key_discovery":{"status":"not_applicable","reason":"HabitatMech does not use an Edison research-provider key; its research recipes run through its own provider surface."},"environment_coverage":{"status":"disabled","reason":"HabitatMech is itself an environment vocabulary: 3,213 habitat records grounded in ENVO, UBERON, FOODON and BTO. Environment coverage compares culture media, ingredients and communities against ENVO and has no loader for HabitatRecord, so it cannot yet read this corpus as either an input or the reference set. Adopting it applies here and is the more valuable direction: teach environment_coverage_dashboard.py to treat habitat records as the reference the other corpora are measured against.","reason_claims":{"present":["claw:scripts/environment_coverage_dashboard.py"]}},"knowledge_gap_scan":{"status":"disabled","reason":"Records carry the shared Discussion section, so the scan applies. The workflow matrix is generated from this manifest, so enabling the capability here with a settings.window is what adds the repository to it. Left disabled until HabitatMech has run the scan once locally and chosen its window."},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["habitat_category","grounding_status","mapping_status"]}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"graph_list","record_id_field":"identifier","anchor_node_types":["HABITAT"],"duplicate_grounding_check":true,"exempt_when":["grounding_status=NOT_APPLICABLE","mapping_status=DEPRECATED"],"strata":["grounding_status","habitat_category"]}},"page_budgets":{"status":"disabled","reason":"Serves 3,404 published HTML pages under pages/ straight from main via GitHub Pages -- it has no generate-pages.yaml -- and declares no size or file-count budgets, so nothing watches them grow. Adopting them applies here; the limits are the repository's to set.","reason_claims":{"present":["pages"],"absent":[".github/workflows/generate-pages.yaml"]}},"writer_audit":{"status":"disabled","reason":"Has no scripts/audit_writers.py. Its writers exist (write_validated_habitat and record_curation_event in the seeder) and records are seeded as build products, so there is drift to audit; adopting it applies here once the audit is written.","reason_claims":{"absent":["scripts/audit_writers.py"]}},"sssom_export":{"status":"disabled","reason":"Grounds each habitat inline on the record (ENVO, UBERON, FOODON, BTO) and keeps its ontology requests as curation/term_requests.tsv rather than publishing a mapping set; there is no SSSOM file for this contract to judge. Adopting one would apply here.","reason_claims":{"present":["curation/term_requests.tsv"]}},"metpo_proposal":{"status":"disabled","reason":"Habitats are grounded in ENVO and the repository raises its gaps through term requests rather than METPO cohorts, so it has no proposals directory. Adopting applies once a habitat-associated phenotype needs a METPO term.","reason_claims":{"absent":["proposals"]}},"kgx_export":{"status":"disabled","reason":"Consumes kg-microbe's KGX as an input -- conf/sources.yaml names the checkout that supplies ENVO, UBERON, FOODON and BTO -- and publishes habitat records, not a graph. Adopting KGX would apply here only if it starts emitting nodes and edges.","reason_claims":{"present":["conf/sources.yaml"]}},"source_queue":{"status":"disabled","reason":"Has no curation/source_queue.tsv; its sources are declared in conf/sources.yaml and the raw payloads in data/raw/MANIFEST.yaml. AntibioticMech wrote the pattern and CellStructureMech adapted it; adopting it here means ranking candidate habitat sources and verifying their licences, which is curation work rather than a file copy.","reason_claims":{"present":["conf/sources.yaml","data/raw/MANIFEST.yaml"],"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"disabled","reason":"Publishes 3,404 HTML pages under pages/ straight from main, so the check has a directory to judge, but it has not been measured on this site yet. Enable after measuring on joining, as AntibioticMech did, so the contract's numbers keep describing what it runs on.","reason_claims":{"present":["pages"]}},"source_catalogue":{"status":"disabled","reason":"Declares its sources in conf/sources.yaml and the fetched payloads in data/raw/MANIFEST.yaml rather than a download.yaml in the fleet's catalogue shape; there is no download.yaml to parse. Converging on one shape is open.","reason_claims":{"present":["conf/sources.yaml","data/raw/MANIFEST.yaml"],"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped-ingredient inventory reads culture-media and ingredient corpora; HabitatMech curates habitats and has no ingredient records, so scripts/inventory_unmapped_ingredients.py defines no loader for it.","reason_claims":{"present":["claw:scripts/inventory_unmapped_ingredients.py"]}}}},"NaturalProductMech":{"key":"naturalproductmech","github":"CultureBotAI/NaturalProductMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"disabled","reason":"Vendors the governed curation-history schema and carries a new-history recipe, but has no history directory yet, so no record can append an event. Adopting applies once the tree exists and the recipe is wired into CI.","reason_claims":{"absent":["history"]}},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"disabled","reason":"No conf/deep_research_provider.yaml and no research recipe; sources are assessed through the source queue. Adopting applies once a provider profile exists under claw's contract.","reason_claims":{"absent":["conf/deep_research_provider.yaml"]}},"edison_key_discovery":{"status":"not_applicable","reason":"NaturalProductMech does not use an Edison research-provider key; it has no research provider integration at all."},"environment_coverage":{"status":"not_applicable","reason":"Environment coverage compares culture media, ingredients and microbial communities. A natural-product structure corpus is not one of those inputs."},"knowledge_gap_scan":{"status":"disabled","reason":"Records do not carry the shared Discussion section the scan reads, and this repository is not in the knowledge-gap-scan workflow matrix. Enable once records carry it."},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["np_pathway","np_classification","grounding_status","curation_status"]}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"graph_list","record_id_field":"identifier","node_grounding_field":"identifier","graph_facets":["scope"],"anchor_node_types":["COMPOUND"],"duplicate_grounding_check":true,"exempt_when":["curation_status=DEPRECATED"],"strata":["np_pathway"]}},"page_budgets":{"status":"disabled","reason":"Serves tracked pages under pages/ straight from main via GitHub Pages and declares no size or file-count budgets, so no conf/pages_budgets.json exists for the audit to read.","reason_claims":{"present":["pages"],"absent":["conf/pages_budgets.json"]}},"writer_audit":{"status":"disabled","reason":"Has no scripts/audit_writers.py, so there is no drift between writer copies to remove yet. Adopting it applies here once the corpus is edited by more than one writer.","reason_claims":{"absent":["scripts/audit_writers.py"]}},"sssom_export":{"status":"disabled","reason":"Records carry ChEBI, NPAtlas and PubChem identifiers inline rather than through a mapping file. Adopting SSSOM applies once a mapping product exists."},"metpo_proposal":{"status":"disabled","reason":"No proposals directory and no METPO grounding; structures are grounded in ChEBI. Adopting applies once a natural-product phenotype needs a METPO term.","reason_claims":{"absent":["proposals"]}},"kgx_export":{"status":"disabled","reason":"No exporter and no graph product yet; adopting KGX applies once the corpus is consumed as a graph."},"source_queue":{"status":"enabled","settings":{"queue_path":"curation/source_queue.tsv","extensions":["structures"]}},"site_contract":{"status":"enabled","settings":{"site_path":"pages"}},"source_catalogue":{"status":"disabled","reason":"Keeps its ranked source list as curation/source_queue.tsv and fetches each adopted source through its own extract recipe; there is no download.yaml for the catalogue check to read. Adopting means deriving the machine-fetchable half from the queue.","reason_claims":{"present":["curation/source_queue.tsv"],"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped inventory reconciles ingredient names across media corpora; natural-product structures are not one of its inputs."}}},"TaxonMech":{"key":"taxonmech","github":"CultureBotAI/TaxonMech","capabilities":{"id_label_validation":{"status":"enabled"},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"disabled","reason":"Vendors scripts/deep_research_contract.py but has no conf/deep_research_provider.yaml or provider recipe. Enable once a research provider is configured and exercised under the shared contract.","reason_claims":{"present":["scripts/deep_research_contract.py"],"absent":["conf/deep_research_provider.yaml"]}},"edison_key_discovery":{"status":"not_applicable","reason":"TaxonMech has no Edison integration or Edison research-provider key."},"environment_coverage":{"status":"not_applicable","reason":"Environment coverage compares culture media, ingredients and microbial communities; taxon identity records are not one of its inputs."},"knowledge_gap_scan":{"status":"disabled","reason":"The schema supports Discussion but no shared scan window or workflow is configured. Enable after adding a durable curated overlay that the generated-corpus pipeline preserves and wiring the scanner to it."},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["taxon_domain","rank","grounding_status","mapping_status"]}},"causal_graph_coverage":{"status":"enabled","settings":{"graph_shape":"graph_list","record_id_field":"identifier","anchor_node_types":["TAXON"],"duplicate_grounding_check":true,"exempt_when":["mapping_status=DEPRECATED","grounding_status=NOT_APPLICABLE"],"strata":["rank","taxon_domain"]}},"page_budgets":{"status":"disabled","reason":"Publishes tracked pages under pages/ but has no conf/pages_budgets.json. Enable once explicit size and file-count budgets are configured and measured.","reason_claims":{"present":["pages"],"absent":["conf/pages_budgets.json"]}},"writer_audit":{"status":"disabled","reason":"Has no scripts/audit_writers.py. Records use a native seeder and validated writer, but no shared audit profile has been adopted. Enable after configuring the profile and measuring its writer coverage.","reason_claims":{"absent":["scripts/audit_writers.py"]}},"sssom_export":{"status":"disabled","reason":"Stores taxonomy mappings and cross-references inline; no SSSOM mapping product is emitted. Enable once a validated export exists."},"metpo_proposal":{"status":"disabled","reason":"The schema references METPO but there is no proposals/ directory or proposal cohort. Enable once the repository produces terms under the shared proposal contract.","reason_claims":{"absent":["proposals"]}},"kgx_export":{"status":"disabled","reason":"Consumes kg-microbe KGX as an input but does not emit a graph product. Enable when an exporter produces validated nodes and edges."},"source_queue":{"status":"disabled","reason":"Sources are configured in conf/sources.yaml and inventoried in data/raw/MANIFEST.yaml; no curation/source_queue.tsv ranks candidate sources. Enable once that review queue is adopted.","reason_claims":{"present":["conf/sources.yaml","data/raw/MANIFEST.yaml"],"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"enabled","settings":{"site_path":"pages"}},"source_catalogue":{"status":"disabled","reason":"Uses conf/sources.yaml and data/raw/MANIFEST.yaml but has no download.yaml in the shared catalogue shape. Enable after adapting the source declarations to that contract.","reason_claims":{"present":["conf/sources.yaml","data/raw/MANIFEST.yaml"],"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped inventory reconciles ingredient names across media corpora; taxon identity records are not one of its inputs."}}},"PathwayMech":{"key":"pathwaymech","github":"CultureBotAI/PathwayMech","capabilities":{"id_label_validation":{"status":"disabled","reason":"Every taxon, participant and reaction pairs a CURIE with a label (CHEBI, NCBITaxon, RHEA, EC, SGD and others), so the check applies. The vendored scripts/validate_id_label_correspondence.py is present, but nothing runs it over the records: there is no conf/id_label_targets.yaml telling it which id and label slots to read, and its only callers are the vendored tests, on synthetic fixtures. Enable once it runs over data/pathways/ on every pull request.","reason_claims":{"present":["data/pathways","scripts/validate_id_label_correspondence.py"],"absent":["conf/id_label_targets.yaml"]}},"curation_history":{"status":"disabled","reason":"No record carries curation history yet. The governed src/pathwaymech/schema/history.yaml is vendored and records may carry an optional curation_history of CurationEvent, but no recipe appends events and nothing in CI validates history records; history/ holds only a README. Enable once a recipe appends events, checked in CI (#515).","reason_claims":{"present":["history","src/pathwaymech/schema/history.yaml"]}},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"disabled","reason":"Research so far is source-discovery notes under research/; there is no conf/deep_research_provider.yaml and no provider recipe. The vendored scripts/deep_research_contract.py is present but nothing runs it; the pathwaymech-deep-research-contract command is a separate, local report-heading checker. Enable once a provider is configured and exercised under the shared contract.","reason_claims":{"present":["research","scripts/deep_research_contract.py"],"absent":["conf/deep_research_provider.yaml"]}},"edison_key_discovery":{"status":"not_applicable","reason":"PathwayMech has no Edison integration or Edison research-provider key."},"environment_coverage":{"status":"not_applicable","reason":"Environment coverage compares culture media, ingredients and microbial communities. Pathway mechanism records carry organism scope as NCBITaxon and no environment terms, so they are not one of its inputs."},"knowledge_gap_scan":{"status":"disabled","reason":"Records have no Discussion slot: the closed schema in src/pathwaymech/schema/pathwaymech.yaml declares none, so there are no Discussions to index, and the block the scan appends under --apply would fail strict validation. There is also no conf/kgscan_config.yaml or scan recipe. The records are curated mechanisms with edge-level evidence, so the scan applies; enable once the schema declares Discussions and a window has been chosen.","reason_claims":{"present":["src/pathwaymech/schema/pathwaymech.yaml"],"absent":["conf/kgscan_config.yaml"]}},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["pathway_type","taxa.id"]}},"page_budgets":{"status":"disabled","reason":"Publishes pages/, rendered from the records (152 files, 385 KB at admission), through a site-only Pages deploy, but declares no size or file-count budgets, so there is no conf/pages_budgets.json for the audit to read. The limits are the repository's to set.","reason_claims":{"present":["pages"],"absent":["conf/pages_budgets.json"]}},"kgx_export":{"status":"enabled","settings":{"nodes_path":"output/kgx/nodes.tsv","edges_path":"output/kgx/edges.tsv","extra_prefixes":["pathwaymech"]}},"writer_audit":{"status":"disabled","reason":"Has no scripts/audit_writers.py, and no tracked script writes a record: the importers print to stdout, either YAML drafts or TSV seed rows. Adopting it applies once a script writes records; the settings are the repository's to declare.","reason_claims":{"absent":["scripts/audit_writers.py"]}},"sssom_export":{"status":"enabled","settings":{"mapping_globs":["output/sssom/*.sssom.tsv"]}},"metpo_proposal":{"status":"disabled","reason":"No proposals/ directory and no METPO grounding; pathways are identified by GO-CAM model, MetaCyc and WikiPathways identifiers. Adopting applies once a pathway-level phenotype needs a METPO term.","reason_claims":{"absent":["proposals"]}},"source_queue":{"status":"disabled","reason":"Has no curation/source_queue.tsv; its source-triage skill ranks candidates by priority in conf/sources.yaml, with evidence under research/source_discovery/. Adopting the queue means recording each source's licence verification and adoption date.","reason_claims":{"present":["conf/sources.yaml","research/source_discovery"],"absent":["curation/source_queue.tsv"]}},"site_contract":{"status":"enabled","settings":{"site_path":"pages"}},"source_catalogue":{"status":"disabled","reason":"Declares its sources in conf/sources.yaml, whose rows carry priority, ingest status, role and homepage but no per-file url or licence, and imports local exports; there is no download.yaml in the fleet's catalogue shape. Adopting applies once each source has its fetchable, licensed half.","reason_claims":{"present":["conf/sources.yaml"],"absent":["download.yaml"]}},"unmapped_inventory_input":{"status":"not_applicable","reason":"The unmapped-ingredient inventory reads culture-media and ingredient corpora; pathway participants are metabolites, enzymes and gene products rather than medium ingredients, so scripts/inventory_unmapped_ingredients.py defines no loader for it.","reason_claims":{"present":["claw:scripts/inventory_unmapped_ingredients.py"]}},"causal_graph_coverage":{"status":"disabled","reason":"Every record is one causal graph: CURIE nodes in the record-level taxa, participants and reactions lists plus the record itself, and one record-level mechanistic_edges list. That is neither graph_list nor node_nested_edges, so the coverage reader would report no record covered. Enable once the reader has a record-level shape."}}},"DUFMech":{"key":"dufmech","github":"CultureBotAI/DUFMech","capabilities":{"id_label_validation":{"status":"enabled","reason":"conf/id_label_targets.yaml uses genuine OAK against a verified frozen Pfam reference, captured independently from family record labels by src/dufmech/id_labels.py. This checks retained-source correspondence, not live ontology freshness or scientific characterization.","reason_claims":{"present":["conf/id_label_targets.yaml","src/dufmech/id_labels.py"]}},"curation_history":{"status":"enabled"},"strict_validation":{"status":"enabled"},"schema_sync":{"status":"enabled"},"release_management":{"status":"enabled"},"build_coordination":{"status":"enabled"},"documentation":{"status":"enabled"},"testing":{"status":"enabled"},"refactoring":{"status":"enabled"},"coordination_hooks":{"status":"enabled"},"deep_research":{"status":"disabled","reason":"conf/deep_research_provider.yaml and src/dufmech/research.py support offline planning and retained simulated results only. Provider execution is refused; enable after reviewed provider-backed adoption.","reason_claims":{"present":["conf/deep_research_provider.yaml","src/dufmech/research.py"]}},"edison_key_discovery":{"status":"not_applicable","reason":"DUFMech has no Edison research-provider integration."},"environment_coverage":{"status":"not_applicable","reason":"DUF/Pfam family evidence is not a culture-media, ingredient or microbial-community environment inventory."},"knowledge_gap_scan":{"status":"enabled","reason":"conf/kgscan_config.yaml and src/dufmech/knowledge_gaps.py use shared sentence scoring over retained abstracts and emit timestamped review packets. Explicit digest-bound review is required before native overlay acceptance. This offline adapter is not a live scheduled scan.","reason_claims":{"present":["conf/kgscan_config.yaml","src/dufmech/knowledge_gaps.py"]},"settings":{"window":25,"scheduled":false}},"vendored_sync":{"status":"enabled"},"corpus_statistics":{"status":"enabled","settings":{"fields":["id","name","seed_status","characterization_status","curation_status","provenance"]}},"page_budgets":{"status":"enabled","settings":{"site_path":"pages","budgets_path":"conf/pages_budgets.json"}},"kgx_export":{"status":"enabled","settings":{"nodes_path":"exports/kgx/nodes.tsv","edges_path":"exports/kgx/edges.tsv"}},"writer_audit":{"status":"enabled","settings":{"search_dirs":["src/dufmech","scripts"],"save_helpers":["write_records","new_history"],"validators":["validate_record\\(","_validate_record\\(","_validate_content\\("],"curation_markers":["new_history\\("]}},"sssom_export":{"status":"enabled","settings":{"mapping_globs":["exports/sssom/*.sssom.tsv"]}},"metpo_proposal":{"status":"disabled","reason":"No proposals/ directory exists. Enable when family mechanisms need new METPO terms and the repository adopts the proposal contract.","reason_claims":{"absent":["proposals"]}},"source_queue":{"status":"enabled","settings":{"queue_path":"curation/source_queue.tsv","extensions":["implementation","reviewed_on","review_basis","script","artifacts","license_url"],"required_when_adopted":["script","artifacts","license_url","review_basis"]}},"site_contract":{"status":"enabled","settings":{"site_path":"pages"}},"source_catalogue":{"status":"enabled"},"unmapped_inventory_input":{"status":"not_applicable","reason":"Protein-family evidence is not a culture-medium ingredient corpus."},"causal_graph_coverage":{"status":"disabled","reason":"The schema supports scientific assertions, but the seeded corpus has no curated mechanistic assertions or adopted causal-graph projection in a supported shared coverage shape."}}}},"artifact_count":20}; var MECHS = { HabitatMech: { key: "habitatmech", scale: "Habitat", tag: "Four habitat vocabularies harmonized into ontology-grounded records that keep every source's attestation.", records: 3206, unit: "habitat records", root: "HabitatRecord", vocab: ["ENVO", "NCBITaxon", "BTO", "UBERON", "FOODON"], github: "https://github.com/CultureBotAI/HabitatMech", site: "https://culturebotai.github.io/HabitatMech/", page: "", license: "CC BY 4.0 data · BSD-3-Clause code", sources: "JGI GOLD ecosystem paths, BacDive isolation sources, PREGO, Madin et al.; ENVO/UBERON/FOODON/BTO/PO via kg-microbe", extra: "686 curator-reviewed; 2,151 ontology-grounded; 176 corroborated by two or more sources. Browse habitat records or explore the semantic text map." }, @@ -1165,7 +1165,7 @@ Each X-Mech is an **autonomous knowledge factory** that curates, validates, and ## The twelve Mechs {: .fleet-section-target} -Each card carries its Mech's identity color. Hover a card to trace its ties in the graph above; use "Show in graph" to select it. The small print under each headline number gives reviewed records and merged pull requests; a Mech whose schema has no field recording review shows only the pull-request count, rather than a zero that would claim more than it knows. Counts were checked on October 5, 2026, with all twelve Mechs included in the vocabulary census and repository statistics. DUFMech's 6,532 seed families are labeled separately from curated mechanism records. Each Browse link is the source for its numbered card, except CultureMech, whose count comes from its repository's corpus snapshot, and DUFMech, whose count comes from its linked seed snapshot. CommunityMech lists 456 communities online and keeps four additional isolate records in its repository. These published-browser totals may differ from the record-corpus census below. Fleet membership and capability declarations come from CLAW fleet manifest at ad3862e. +Each card carries its Mech's identity color. Hover a card to trace its ties in the graph above; use "Show in graph" to select it. The small print under each headline number gives reviewed records and merged pull requests; a Mech whose schema has no field recording review shows only the pull-request count, rather than a zero that would claim more than it knows. Counts were checked on October 5, 2026, with all twelve Mechs included in the vocabulary census and repository statistics. DUFMech's 6,532 seed families are labeled separately from curated mechanism records. Each Browse link is the source for its numbered card, except CultureMech, whose count comes from its repository's corpus snapshot, and DUFMech, whose count comes from its linked seed snapshot. CommunityMech lists 456 communities online and keeps four additional isolate records in its repository. These published-browser totals may differ from the record-corpus census below. Fleet membership and capability declarations come from CLAW fleet manifest at 73958ed.

    NaturalProductMech

    Natural products
    @@ -1283,7 +1283,7 @@ Alongside record browsing, the Mechs publish complementary ways to explore their ### Website features {: .fleet-section-target} -The capability table further down lists the shared contracts each Mech declares to CLAW. This table shows what a reader can do on each Mech's own website: 24 features across the twelve published sites, with a baseline audit dated October 5, 2026. The audit methods, feature criteria and evidence are listed below the table. A feature counts as present only if it met its criteria, so a search that lists only its first 20 matches, or cannot find record identifiers, counts as partial. Some features do not apply to every site: a page that embeds its data makes no data request that could fail, and a page with no search or filters has no search to link to. Hover a marker for its evidence, or open the list below the table. A gap marks a possible improvement to a website, not a problem with the Mech's records. The notes describe each site at its audit date, independently of the card and census pins; a later redeployment can change a verdict. +The capability table further down lists the shared contracts each Mech declares to CLAW. This table shows what a reader can do on each Mech's own website: 24 features across the twelve published sites, with a baseline audit dated October 5, 2026. Site-specific rechecks: DUFMech (October 7, 2026). Their methods and deployed revisions are recorded below. Other sites retain the baseline audit date and method. The audit methods, feature criteria and evidence are listed below the table. A feature counts as present only if it met its criteria, so a search that lists only its first 20 matches, or cannot find record identifiers, counts as partial. Some features do not apply to every site: a page that embeds its data makes no data request that could fail, and a page with no search or filters has no search to link to. Hover a marker for its evidence, or open the list below the table. A gap marks a possible improvement to a website, not a problem with the Mech's records. The notes describe each site at its audit date, independently of the card and census pins; a later redeployment can change a verdict.
    @@ -1298,13 +1298,13 @@ The capability table further down lists the shared contracts each Mech declares - + - +
    PathwayMech
    CellStructureMech
    ProteinTraitsMech
    DUFMech
    DUFMech
    NaturalProductMech
    AntibioticMech
    MediaIngredientMech
    CultureMech
    Sites with it76110011112597890127110253647
    Sites with it871211111236989101128121363748
    presentpartial, as its note explainsmissingdoes not apply to this site
    @@ -1319,7 +1319,7 @@ The capability table further down lists the shared contracts each Mech declares

    PathwayMech

    CellStructureMech

    ProteinTraitsMech

    -

    DUFMech

    +

    DUFMech

    Site-specific check on October 7, 2026, deployed revision 1dccc4f. DUF-only recheck bound to successful github-pages deployment 6920450378 at 1dccc4ff61998e78f12448c52f37e4d370fe7299. Fresh post-129 checks verified 26 byte-exact public paths and desktop/mobile light/dark behavior, completed by a separate review of 12 new screenshots; the raw automated receipt remains unchanged. The 24 criteria also reuse retained October 7 supplementary checks of identifier/label searches, filters, counts, all sort options, copied URL state, category/navigation views, 390 px layouts, deliberate catalogue failures and JavaScript-free pagination, after all 19,881 artifact-file digest entries were verified identical. Catalogue completeness combines the exact served inventory and complete served bulk-index IDs with exhaustive offline coverage of 131 listing pages and representative public record routes, not a complete public record crawl. Deployed bytes match artifact ef7e2d01d337ce94c12abdda282a76ae5faaf313; build 3db152edc7acea72 pins corpus source 658dc8c9e4ed2587f7bf1c62ee59563f327706de, distinct from deployment. Retained external checks cover identical immutable targets and bounded mutable targets/official identity metadata; these were not all re-fetched in the post-129 run. No external provider application-rendering or scientific-review claim. GitHub code-license HTML returned 429 during the earlier supplementary check; raw project license bytes were verified separately. P33017 remains an inactive historical reference. All 6,532 families remain SEEDED and UNSCORED with zero curated functional assertions; retained reports are scoped non-scientific audits. Other sites retain the October 5 baseline. These 24 website criteria do not promote any of the 26 repository capabilities.

    NaturalProductMech

    AntibioticMech

    MediaIngredientMech

    @@ -1373,7 +1373,7 @@ Beyond shared vocabulary, Mechs name one another directly, in record fields, in [culturebotai-claw](https://github.com/CultureBotAI/culturebotai-claw) is the fleet's coordinator. It does not hold science of its own; it holds the definition of the fleet, the artifacts every Mech must share byte-for-byte, and tooling for cross-repository curation and validation.
    -

    Fleet manifest

    fleet.yaml is the single source of truth for which repositories form the fleet. The manifest declares eleven of the twelve projects shown here. Separately listed projects without a declaration: DUFMech. Every member declares every capability exactly once as enabled, disabled or not applicable, and every disabled or not-applicable entry gives a reason, so nothing is silently off.

    +

    Fleet manifest

    fleet.yaml is the single source of truth for which repositories form the fleet. The manifest declares twelve of the twelve projects shown here. All projects shown here have a manifest declaration. Every member declares every capability exactly once as enabled, disabled or not applicable, and every disabled or not-applicable entry gives a reason, so nothing is silently off.

    Vendored governance

    Shared LinkML modules (mech_shared.yaml, history.yaml), validators and behavioral contracts live in claw and are vendored into its declared members byte-identically, pinned to one immutable claw commit and checked in CI. The canonical registry defines 20 artifacts, with each member receiving the contracts that apply to it.

    Pipelines and skills

    CLAW provides pipeline discovery, repository checks, shared curation tools and validated dry runs. Agent and pipeline execution through openclaw-cli is not implemented; environment-curation and unified ingredient-mapping apply modes are disabled pending transactional writers. Deep-research tooling supports provider triage and dry-run result capture; provider execution is not implemented.

    @@ -1393,7 +1393,7 @@ Capability declarations from CLAW record adoption of shared contracts; they do n PathwayMech CellStructureMech ProteinTraitsMech -DUFMech +DUFMech NaturalProductMech AntibioticMech MediaIngredientMech @@ -1406,7 +1406,7 @@ Capability declarations from CLAW record adoption of shared contracts; they do n ## What makes a Mech {: .fleet-section-target} -The Mechs share curation conventions, with adoption recorded per capability in the table above. The record and schema conventions below describe structured corpora; DUFMech's numeric card counts seed families rather than curated mechanism records. The website audit records DUFMech's schema documentation as not applicable. The fleet standard is documented in [CLAW's MECH_STANDARD.md](https://github.com/CultureBotAI/culturebotai-claw/blob/main/docs/guides/MECH_STANDARD.md): +The Mechs share curation conventions, with adoption recorded per capability in the table above. The record and schema conventions below describe structured corpora; DUFMech's numeric card counts seed families rather than curated mechanism records. The website audit records DUFMech's schema documentation as present. The fleet standard is documented in [CLAW's MECH_STANDARD.md](https://github.com/CultureBotAI/culturebotai-claw/blob/main/docs/guides/MECH_STANDARD.md):