Skip to content

Preserve conversion documents and expand validated graph formats - #53

Merged
davidkpiano merged 1 commit into
mainfrom
feature/conversion-fidelity
Oct 12, 2026
Merged

davidkpiano merged 1 commit into
mainfrom
feature/conversion-fidelity

Conversation

@davidkpiano

@davidkpiano davidkpiano commented Oct 12, 2026 •

Copy link
Copy Markdown
Member

Graph-only conversions lost native comments, metadata, identity and several mapped semantics. Add explicit Graph/native/source preservation assessments and a serializable GraphDocument API: unchanged source survives JSON persistence exactly; supported edits patch and reparse; unsupported or conflicting edits fail explicitly.

Repair existing converters, add ten scoped adapters and six Mermaid profiles, and document their native coverage and limits. Preserve existing defaults, add explicit standard/version profiles, and include a minor Changeset. Native tools remain development-only; draw.io compression uses optional fflate.

Validation:

  • pnpm verify: source/repository types, generated checks, conventions, 3,994 core tests, build, publint, packed runtime/type smoke.
  • Actual Node 20.20.2: 3,994 tests. Actual Node 24.15.0: 4,222 combined core/native tests and all coverage gates.
  • Converter coverage: 97.10% lines, 86.44% branches, 95.23% functions, 92.26% statements.
  • Pinned independent parsers, compilers, runtime libraries and official schemas; Python/Java native semantics; large sparse/bulk-edit controls.

Exact source retention is separate from complete semantic interpretation. Projections and edit scopes remain explicit; no unrestricted 100% native/Graph losslessness claim. RDF, GraphSON, CX2 and DGML require follow-up semantic mappings.

Per-converter coverage and native evidence: plans/005-final-verification.md. Shared checkout preserved; integration base de5ebf8, PR base main.


Devin Review

@coderabbitai

coderabbitai Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 226 files, which is 126 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 3d8be391-0be3-47d6-8c48-fbf12b8f74ee

📥 Commits

Reviewing files that changed from the base of the PR and between de5ebf8 and 15206b2.


⛔ Files ignored due to path filters (4)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • tests/native/fixtures/graphviz/clusters-ranks.dot is excluded by !**/*.dot
  • tests/native/fixtures/graphviz/parallel-undirected.dot is excluded by !**/*.dot
  • tests/native/fixtures/graphviz/strict-ports.dot is excluded by !**/*.dot

📒 Files selected for processing (226)
  • .changeset/conversion-fidelity.md
  • .gitattributes
  • .github/workflows/ci.yml
  • .gitignore
  • README.md
  • docs/adr/003-serializable-native-documents.md
  • docs/native-validation.md
  • package.json
  • plans/001-fidelity-contract-and-regressions.md
  • plans/002-existing-converter-semantics.md
  • plans/003-document-preservation.md
  • plans/004-native-validation-and-adapters.md
  • plans/005-final-verification.md
  • plans/README.md
  • requirements/native.txt
  • scripts/native/d2-compile.mjs
  • scripts/native/igraph_oracle.py
  • scripts/native/networkx_oracle.py
  • scripts/native/plantuml-tools.json
  • scripts/native/scipy_oracle.py
  • scripts/native/setup-plantuml.mjs
  • scripts/smoke-package.ts
  • src/format-support.ts
  • src/formats/adjacency-list/README.md
  • src/formats/adjacency-list/index.ts
  • src/formats/adjacency-matrix/README.md
  • src/formats/adjacency-matrix/core.ts
  • src/formats/adjacency-matrix/index.ts
  • src/formats/csv/README.md
  • src/formats/csv/index.ts
  • src/formats/csv/table.ts
  • src/formats/cytoscape/README.md
  • src/formats/cytoscape/index.ts
  • src/formats/d2/README.md
  • src/formats/d2/document.ts
  • src/formats/d2/emitter.ts
  • src/formats/d2/index.ts
  • src/formats/d2/parser.ts
  • src/formats/d2/shared.ts
  • src/formats/d3/README.md
  • src/formats/d3/index.ts
  • src/formats/document/README.md
  • src/formats/document/index.ts
  • src/formats/document/text.ts
  • src/formats/dot/README.md
  • src/formats/dot/document.ts
  • src/formats/dot/index.ts
  • src/formats/drawio/README.md
  • src/formats/drawio/index.ts
  • src/formats/edge-list/README.md
  • src/formats/edge-list/index.ts
  • src/formats/elk/README.md
  • src/formats/elk/index.ts
  • src/formats/gexf/README.md
  • src/formats/gexf/index.ts
  • src/formats/gml/README.md
  • src/formats/gml/document.ts
  • src/formats/gml/index.ts
  • src/formats/graphlib/README.md
  • src/formats/graphlib/index.ts
  • src/formats/graphml/README.md
  • src/formats/graphml/index.ts
  • src/formats/graphology/README.md
  • src/formats/graphology/index.ts
  • src/formats/graphviz-json/README.md
  • src/formats/graphviz-json/index.ts
  • src/formats/jgf/README.md
  • src/formats/jgf/index.ts
  • src/formats/matrix-market/README.md
  • src/formats/matrix-market/index.ts
  • src/formats/mermaid/README.md
  • src/formats/mermaid/architecture.ts
  • src/formats/mermaid/block.ts
  • src/formats/mermaid/c4.ts
  • src/formats/mermaid/class-diagram.ts
  • src/formats/mermaid/document.ts
  • src/formats/mermaid/er-diagram.ts
  • src/formats/mermaid/flowchart.ts
  • src/formats/mermaid/git-graph.ts
  • src/formats/mermaid/index.ts
  • src/formats/mermaid/ishikawa.ts
  • src/formats/mermaid/mindmap.ts
  • src/formats/mermaid/profile-shared.ts
  • src/formats/mermaid/requirement.ts
  • src/formats/mermaid/sankey.ts
  • src/formats/mermaid/sequence.ts
  • src/formats/mermaid/shared.ts
  • src/formats/mermaid/state.ts
  • src/formats/mermaid/use-case.ts
  • src/formats/networkx/README.md
  • src/formats/networkx/index.ts
  • src/formats/pajek/README.md
  • src/formats/pajek/index.ts
  • src/formats/plantuml/README.md
  • src/formats/plantuml/index.ts
  • src/formats/preservation.ts
  • src/formats/structured-json.ts
  • src/formats/support.ts
  • src/formats/tgf/README.md
  • src/formats/tgf/index.ts
  • src/formats/xml-document.ts
  • src/formats/xml-preservation.ts
  • src/formats/xml-standard.ts
  • src/formats/xyflow/README.md
  • src/formats/xyflow/index.ts
  • tests/formats/csv.test.ts
  • tests/formats/cytoscape.test.ts
  • tests/formats/document-diagrams.test.ts
  • tests/formats/document-structured.test.ts
  • tests/formats/document-xml.test.ts
  • tests/formats/document.test.ts
  • tests/formats/dot.test.ts
  • tests/formats/drawio.test.ts
  • tests/formats/fidelity-diagrams.test.ts
  • tests/formats/fidelity-structured.test.ts
  • tests/formats/fidelity-xml.test.ts
  • tests/formats/gml.test.ts
  • tests/formats/graphml.test.ts
  • tests/formats/graphviz-json.test.ts
  • tests/formats/jgf.test.ts
  • tests/formats/matrices.test.ts
  • tests/formats/mermaid/expanded.test.ts
  • tests/formats/mermaid/sequence.test.ts
  • tests/formats/mixed-directedness.test.ts
  • tests/formats/pajek.test.ts
  • tests/formats/plantuml.test.ts
  • tests/formats/primary-json.test.ts
  • tests/formats/support-matrix.test.ts
  • tests/native/csv.test.ts
  • tests/native/d2.test.ts
  • tests/native/drawio-codec.test.ts
  • tests/native/drawio-oracle.ts
  • tests/native/drawio-preparation.test.ts
  • tests/native/fixtures/d2-profiles.json
  • tests/native/fixtures/drawio/LICENSE.txt
  • tests/native/fixtures/drawio/mxfile.xsd
  • tests/native/fixtures/drawio/page-first.maxgraph.json
  • tests/native/fixtures/drawio/page-first.mxgraph.xml
  • tests/native/fixtures/drawio/page-second.maxgraph.json
  • tests/native/fixtures/drawio/page-second.mxgraph.xml
  • tests/native/fixtures/drawio/pages-compressed.drawio
  • tests/native/fixtures/drawio/pages-uncompressed.drawio
  • tests/native/fixtures/drawio/provenance.json
  • tests/native/fixtures/gexf/1.2draft/data.xsd
  • tests/native/fixtures/gexf/1.2draft/dynamics.xsd
  • tests/native/fixtures/gexf/1.2draft/gexf.xsd
  • tests/native/fixtures/gexf/1.2draft/hierarchy.xsd
  • tests/native/fixtures/gexf/1.2draft/phylogenics.xsd
  • tests/native/fixtures/gexf/1.2draft/provenance.json
  • tests/native/fixtures/gexf/1.2draft/viz.xsd
  • tests/native/fixtures/gexf/1.3/dynamics.xsd
  • tests/native/fixtures/gexf/1.3/gexf.xsd
  • tests/native/fixtures/gexf/1.3/provenance.json
  • tests/native/fixtures/gexf/1.3/viz.xsd
  • tests/native/fixtures/gexf/LICENSE.md
  • tests/native/fixtures/gexf/cases/provenance.json
  • tests/native/fixtures/gexf/cases/scopes-mutual.gexf
  • tests/native/fixtures/gexf/provenance.json
  • tests/native/fixtures/gml/native.gml
  • tests/native/fixtures/gml/native.native.json
  • tests/native/fixtures/gml/provenance.json
  • tests/native/fixtures/graphml/1.0/graphml-structure.xsd
  • tests/native/fixtures/graphml/1.0/graphml.xsd
  • tests/native/fixtures/graphml/1.0/provenance.json
  • tests/native/fixtures/graphml/1.0/xlink.xsd
  • tests/native/fixtures/graphml/LICENSE.txt
  • tests/native/fixtures/graphml/cases/nested-keyrefs.graphml
  • tests/native/fixtures/graphml/cases/provenance.json
  • tests/native/fixtures/graphml/cases/scopes-ports.graphml
  • tests/native/fixtures/graphml/provenance.json
  • tests/native/fixtures/graphviz/clusters-ranks.json
  • tests/native/fixtures/graphviz/parallel-undirected.json
  • tests/native/fixtures/graphviz/provenance.json
  • tests/native/fixtures/graphviz/schema/LICENSE.txt
  • tests/native/fixtures/graphviz/schema/graphviz_json_schema.json
  • tests/native/fixtures/graphviz/schema/provenance.json
  • tests/native/fixtures/graphviz/strict-ports.json
  • tests/native/fixtures/jgf/LICENSE
  • tests/native/fixtures/jgf/json-graph-schema_v1.json
  • tests/native/fixtures/jgf/json-graph-schema_v2.json
  • tests/native/fixtures/jgf/provenance.json
  • tests/native/fixtures/mermaid-expanded.json
  • tests/native/fixtures/mermaid-profiles.json
  • tests/native/fixtures/networkx/multidigraph.json
  • tests/native/fixtures/networkx/multidigraph.native.json
  • tests/native/fixtures/networkx/provenance.json
  • tests/native/fixtures/networkx/simple-links.json
  • tests/native/fixtures/networkx/simple-links.native.json
  • tests/native/fixtures/pajek/comments.igraph.json
  • tests/native/fixtures/pajek/comments.net
  • tests/native/fixtures/pajek/duplicate-labels.igraph.json
  • tests/native/fixtures/pajek/duplicate-labels.net
  • tests/native/fixtures/pajek/igraph-provenance.json
  • tests/native/fixtures/pajek/mixed.igraph.json
  • tests/native/fixtures/pajek/mixed.net
  • tests/native/fixtures/pajek/provenance.json
  • tests/native/fixtures/pajek/uniform.igraph.json
  • tests/native/fixtures/pajek/uniform.native.json
  • tests/native/fixtures/pajek/uniform.net
  • tests/native/fixtures/structured/README.md
  • tests/native/fixtures/structured/fixtures.ts
  • tests/native/followon-adapters.test.ts
  • tests/native/gml.test.ts
  • tests/native/graphviz.test.ts
  • tests/native/igraph-oracle.ts
  • tests/native/igraph-pajek.test.ts
  • tests/native/jgf.test.ts
  • tests/native/matrices.test.ts
  • tests/native/mermaid-decoder.ts
  • tests/native/mermaid-expanded.test.ts
  • tests/native/mermaid.test.ts
  • tests/native/networkx-oracle.ts
  • tests/native/networkx.test.ts
  • tests/native/pajek-oracle.test.ts
  • tests/native/plantuml-oracle.ts
  • tests/native/plantuml.test.ts
  • tests/native/primary-json.test.ts
  • tests/native/scipy-oracle.ts
  • tests/native/structured-oracles.test.ts
  • tests/native/xml-coverage.md
  • tests/native/xml-oracle.ts
  • tests/native/xml.test.ts
  • tsdown.config.ts
  • vitest.config.ts
  • vitest.coverage.config.ts
  • vitest.native.config.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@davidkpiano
davidkpiano marked this pull request as ready for review October 12, 2026 14:20
@davidkpiano
davidkpiano merged commit 8d1b139 into main Oct 12, 2026
7 of 8 checks passed
@github-actions github-actions Bot mentioned this pull request Oct 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant