Skip to content

Add Sphinx/Doxygen/Breathe documentation framework for phlex and phlex::experimental API#323

Merged
greenc-FNAL merged 12 commits intomainfrom
copilot/update-branch-with-main-again
Apr 2, 2026
Merged

Add Sphinx/Doxygen/Breathe documentation framework for phlex and phlex::experimental API#323
greenc-FNAL merged 12 commits intomainfrom
copilot/update-branch-with-main-again

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Feb 13, 2026

Adds a Sphinx + Doxygen + Breathe documentation scaffold under docs/ covering phlex and phlex::experimental namespaces (user-facing API only).

Doxyfile

  • INPUT = phlex form, OUTPUT_DIRECTORY = docs/doxygen (repo-root-relative)
  • PREDEFINED: BOOST_DLL_ALIAS, PHLEX_DETAIL_REGISTER_PLUGIN, PHLEX_DETAIL_REGISTER_DRIVER_PLUGIN; symbol-visibility export macros PHLEX_EXPORT, PHLEX_CORE_EXPORT, PHLEX_MODEL_EXPORT, PHLEX_CONFIGURATION_INTERNAL_EXPORT, PHLEX_UTILITIES_EXPORT (all defined as empty so Doxygen can parse annotated class/struct declarations from a clean source tree)

phlex namespace pages

  • phlex::configuration, phlex::handle, phlex::concurrency
  • phlex::fixed_hierarchy, phlex::data_cell_cursor

phlex::experimental namespace pages

  • Plugin entry points: module_graph_proxy, source_graph_proxy, driver_proxy, driver_bundle, graph_proxy

index.rst: single toctree section — Plugin entry points

Other

  • docs/requirements.txt: sphinx>=9.1,<10, breathe>=4.36,<5, sphinx-rtd-theme>=3.1,<4
  • .gitignore: docs/doxygen/, docs/build/
  • conf.py: module docstring (ruff D100), templates_path = [], version 0.2.0
  • .github/copilot-instructions.md: #### Verifying File Endings — use tail -c 2 | od -c (not od -a | tail -3, which has a false-negative when two consecutive \n straddle an address-line boundary)

Copilot AI changed the title [WIP] Update branch with latest main and enhance features Update Sphinx/Doxygen/Breathe docs: pin latest deps, fix config, expand API coverage Feb 13, 2026
Copilot AI requested a review from greenc-FNAL February 13, 2026 17:19
@greenc-FNAL
Copy link
Copy Markdown
Contributor

@copilot I think for maximum clarity, it would be better to reset this branch to upstream/main and then re-do the work following the current philosophy, functions/class structure, etc.

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Feb 13, 2026

@copilot I think for maximum clarity, it would be better to reset this branch to upstream/main and then re-do the work following the current philosophy, functions/class structure, etc.

Done. In commit 412a5ec I reset the branch to main and removed all the stale files from the old base. In 0712ae9 I fixed the docs to match the current codebase (correct class names, macros, version).

The PR now shows only 13 files changed (135 additions, 0 deletions from main): the docs/ directory with Sphinx/Doxygen/Breathe configuration and API pages, plus .gitignore entries for docs build output.

@greenc-FNAL greenc-FNAL force-pushed the copilot/update-branch-with-main-again branch from 0712ae9 to 2095c80 Compare February 13, 2026 18:25
@greenc-FNAL greenc-FNAL changed the base branch from jules-feature-sphinx-doxygen-breathe-setup to main February 13, 2026 18:30
@greenc-FNAL greenc-FNAL marked this pull request as ready for review February 13, 2026 18:31
Copilot AI review requested due to automatic review settings February 13, 2026 18:31
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a Sphinx + Doxygen + Breathe documentation scaffold under docs/ to generate API reference documentation for key phlex::experimental types, along with dependency requirements and gitignore entries for generated outputs.

Changes:

  • Add Sphinx project entrypoint (index.rst) and minimal conf.py wired to Breathe.
  • Add API reference .rst pages for several phlex::experimental classes.
  • Add Doxygen configuration + Python requirements, and ignore generated docs artifacts in .gitignore.

Reviewed changes

Copilot reviewed 12 out of 13 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
docs/source/index.rst Adds top-level Sphinx landing page and toctree for API pages.
docs/source/conf.py Adds Sphinx configuration with Breathe integration.
docs/source/api/graph_proxy.rst Adds API page for phlex::experimental::graph_proxy.
docs/source/api/framework_graph.rst Adds API page for framework_graph and layer_sentry.
docs/source/api/registrar.rst Adds API page for phlex::experimental::registrar.
docs/source/api/declared_transform.rst Adds API page for declared_transform.
docs/source/api/declared_fold.rst Adds API page for declared_fold.
docs/source/api/declared_unfold.rst Adds API page for declared_unfold.
docs/source/api/product_store.rst Adds API page for product_store.
docs/source/api/products.rst Adds API page for products.
docs/requirements.txt Adds Python dependencies for building docs.
docs/Doxyfile Adds Doxygen configuration to emit XML for Breathe.
.gitignore Ignores generated Doxygen/Sphinx build output directories.
Comments suppressed due to low confidence (1)

docs/requirements.txt:4

  • The PR description says dependencies are “pinned”, but requirements.txt uses version ranges (e.g., >=9.1,<10) which will allow new releases and can change doc build output over time. Either pin exact versions (e.g., ==...) to match the description, or update the description to reflect that these are minimum/compatible ranges. Also remove the trailing blank line at EOF to avoid generating a 4th empty requirement line.
sphinx>=9.1,<10
breathe>=4.36,<5
sphinx-rtd-theme>=3.1,<4

Comment thread docs/source/conf.py Outdated
@greenc-FNAL
Copy link
Copy Markdown
Contributor

@phlexbot python-fix

@github-actions
Copy link
Copy Markdown
Contributor

Automatic ruff fixes pushed (commit af87c94).
⚠️ Note: Some issues may require manual review and fixing.

@codecov
Copy link
Copy Markdown

codecov bot commented Feb 13, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

@@            Coverage Diff             @@
##             main     #323      +/-   ##
==========================================
+ Coverage   85.49%   85.58%   +0.08%     
==========================================
  Files         142      142              
  Lines        3586     3586              
  Branches      615      615              
==========================================
+ Hits         3066     3069       +3     
  Misses        310      310              
+ Partials      210      207       -3     
Flag Coverage Δ
unittests 85.58% <ø> (+0.08%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
phlex/core/graph_proxy.hpp 90.00% <ø> (ø)
phlex/driver.hpp 100.00% <ø> (ø)

... and 2 files with indirect coverage changes


Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update b23c5a1...73324d7. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@greenc-FNAL greenc-FNAL force-pushed the copilot/update-branch-with-main-again branch from 824f679 to a7a5bf2 Compare February 14, 2026 00:18
@greenc-FNAL greenc-FNAL marked this pull request as draft February 14, 2026 01:19
@greenc-FNAL greenc-FNAL force-pushed the copilot/update-branch-with-main-again branch 2 times, most recently from dcbc52d to e416cbc Compare February 20, 2026 17:44
@greenc-FNAL greenc-FNAL force-pushed the copilot/update-branch-with-main-again branch from e416cbc to 85a095f Compare February 24, 2026 16:32
@greenc-FNAL greenc-FNAL force-pushed the copilot/update-branch-with-main-again branch from 85a095f to a62c7df Compare March 4, 2026 18:52
@greenc-FNAL
Copy link
Copy Markdown
Contributor

@copilot This PR (branch copilot/update-branch-with-main-again) has been rebased against main once more: please re-evaluate and bring up to date with respect to the goals of your original prompt for this task.

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Mar 4, 2026

@copilot This PR (branch copilot/update-branch-with-main-again) has been rebased against main once more: please re-evaluate and bring up to date wi...

Re-evaluated after rebase. The only needed fix was removing the layer_sentry reference from framework_graph.rst — that class was deleted from the codebase since my last update. All other documented classes (graph_proxy, framework_graph, registrar, declared_transform, declared_fold, declared_unfold, product_store, products) verified present. Dependency versions, macros, and project version all still current. Done in 234e183.

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 2, 2026

@copilot Re-check your reviews (#323 (review), #323 (review)) and verify w...

Verified with od -a: all docs files end correctly with a single nl. For example, docs/source/api/concurrency.rst ends with r s : nl — no preceding nl, no trailing blank line. The previous automated reviewer comments claiming extra blank lines were all false positives.

Added a #### Verifying File Endings subsection to .github/copilot-instructions.md in d4b8a47 instructing future sessions to always run od -a <file> | tail -3 and verify independently before acting on such claims from the automated reviewer.

@greenc-FNAL greenc-FNAL force-pushed the copilot/update-branch-with-main-again branch 3 times, most recently from 6ac7499 to 149dfe8 Compare April 2, 2026 15:26
@beojan
Copy link
Copy Markdown
Contributor

beojan commented Apr 2, 2026

Can we add an action to build the documentation?

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 2, 2026

@greenc-FNAL Unfortunately I hit an unexpected error while processing your comment. I've automatically reported this to GitHub.

You can ask me to try again later by mentioning me in a new comment.

If you want to contact GitHub about this error, please mention the following identifier so they can better serve you: 41a75d82-b8e0-4ab1-9926-6cd4e52fa532

Sorry for the inconvenience!

2 similar comments
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 2, 2026

@greenc-FNAL Unfortunately I hit an unexpected error while processing your comment. I've automatically reported this to GitHub.

You can ask me to try again later by mentioning me in a new comment.

If you want to contact GitHub about this error, please mention the following identifier so they can better serve you: 41a75d82-b8e0-4ab1-9926-6cd4e52fa532

Sorry for the inconvenience!

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 2, 2026

@greenc-FNAL Unfortunately I hit an unexpected error while processing your comment. I've automatically reported this to GitHub.

You can ask me to try again later by mentioning me in a new comment.

If you want to contact GitHub about this error, please mention the following identifier so they can better serve you: 41a75d82-b8e0-4ab1-9926-6cd4e52fa532

Sorry for the inconvenience!

@greenc-FNAL
Copy link
Copy Markdown
Contributor

Can we add an action to build the documentation?

Absolutely, but I'd prefer to do it as a separate PR.

Copy link
Copy Markdown
Member

@knoepfel knoepfel left a comment

Choose a reason for hiding this comment

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

@greenc-FNAL, thanks for this. There are several things here that are not intended to be user-facing (phlex::experimental::declared_*, phlex::experimental::registrar, phlex::experimental::product*). The *_proxy classes are user-facing, but their types are somewhat implementation-defined (the user never needs to know the type, but they do need to know the user interface).

I guess I would remove the declared_* files, and maybe we can go from there?

@greenc-FNAL
Copy link
Copy Markdown
Contributor

@greenc-FNAL, thanks for this. There are several things here that are not intended to be user-facing (phlex::experimental::declared_*, phlex::experimental::registrar, phlex::experimental::product*). The *_proxy classes are user-facing, but their types are somewhat implementation-defined (the user never needs to know the type, but they do need to know the user interface).

I guess I would remove the declared_* files, and maybe we can go from there?

What about phlex::experimental::framework_graph?

@knoepfel
Copy link
Copy Markdown
Member

knoepfel commented Apr 2, 2026

@greenc-FNAL, thanks for this. There are several things here that are not intended to be user-facing (phlex::experimental::declared_*, phlex::experimental::registrar, phlex::experimental::product*). The *_proxy classes are user-facing, but their types are somewhat implementation-defined (the user never needs to know the type, but they do need to know the user interface).
I guess I would remove the declared_* files, and maybe we can go from there?

What about phlex::experimental::framework_graph?

We do use framework_graph for unit testing....but it's not something the user will ever encounter in the context of a framework job itself. I don't think it needs to have code-generated documentation that we publish.

google-labs-jules bot and others added 11 commits April 2, 2026 14:45
…work

This commit introduces the foundational infrastructure for documenting the C++ codebase using a Sphinx, Doxygen, and Breathe toolchain.

Key changes include:
- A new `docs/` directory to house all documentation-related files.
- Configuration files for Sphinx (`conf.py`) and Doxygen (`Doxyfile`).
- A `requirements.txt` file listing the necessary Python dependencies for building the documentation.
- The `phlex/core/graph_proxy.hpp` header has been fully documented with Doxygen comments to serve as a style guide and working example.
- An initial Sphinx structure in `docs/source/` that integrates the Doxygen XML output via Breathe, making the `graph_proxy` documentation available on the documentation website.

Initial plan

Update docs: pin latest deps, fix version, expand API coverage, add .gitignore entries

Co-authored-by: greenc-FNAL <2372949+greenc-FNAL@users.noreply.github.com>

Reset branch to main and re-apply docs-only changes

Co-authored-by: greenc-FNAL <2372949+greenc-FNAL@users.noreply.github.com>

Fix docs for current codebase: correct version, class names, macros, and .gitignore

Co-authored-by: greenc-FNAL <2372949+greenc-FNAL@users.noreply.github.com>

Add module docstring to docs/source/conf.py for ruff D100 compliance

Co-authored-by: greenc-FNAL <2372949+greenc-FNAL@users.noreply.github.com>

Apply ruff fixes

Ignore `mypy` errors
Co-authored-by: greenc-FNAL <2372949+greenc-FNAL@users.noreply.github.com>
…ing entry points)

Co-authored-by: greenc-FNAL <2372949+greenc-FNAL@users.noreply.github.com>
…docs (configuration, handle, concurrency)

Co-authored-by: greenc-FNAL <2372949+greenc-FNAL@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…cursor; update version and macros

Agent-Logs-Url: https://github.com/Framework-R-D/phlex/sessions/7b217a64-eda8-43cd-be76-88d86b4999b1

Co-authored-by: greenc-FNAL <2372949+greenc-FNAL@users.noreply.github.com>
…automated reviewer claims

Agent-Logs-Url: https://github.com/Framework-R-D/phlex/sessions/c61425d6-bc90-479f-8763-b8b5a137466d

Co-authored-by: greenc-FNAL <2372949+greenc-FNAL@users.noreply.github.com>
PR #322 (merged to main) added phlex_*_EXPORT macros to all public
headers. These macros are generated at build time and unavailable when
running doxygen from a clean source tree. Without PREDEFINED entries,
Doxygen silently fails to parse class/struct definitions that contain
the macro token. Add all five export macros as empty definitions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…only

Remove RST pages for framework_graph, registrar, product_store, and
products — these are not user-facing per project lead review in
#323 (review).

For declared_fold, declared_transform, and declared_unfold, drop
':undoc-members:' so that internal/opaque members are no longer
surfaced. In declared_unfold.rst, add the generator class, which is
the one user-facing type in these headers (user unfold functions
receive a generator& and call make_child_for). Add Doxygen comments
to generator and generator::make_child_for() in declared_unfold.hpp
so they appear in the rendered docs.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@greenc-FNAL greenc-FNAL force-pushed the copilot/update-branch-with-main-again branch from 561e601 to 6944c5f Compare April 2, 2026 20:34
Per #323 (review):
declared_fold, declared_transform, and declared_unfold are not user-facing.
Remove their RST pages, toctree section, and the Doxygen comments added
to declared_unfold.hpp in the prior commit that were only intended to
support those pages.

The *_proxy pages (already present) are the user-facing entry points.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Docs: add Doxygen comments to *_proxy classes; drop :undoc-members:

Add /// Doxygen comments to user-facing public methods in graph_proxy,
module_graph_proxy, source_graph_proxy, driver_proxy, and driver_bundle.
Remove :undoc-members: from all four RST pages so only documented
members are rendered, keeping private/internal members out of the
published API reference.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@greenc-FNAL greenc-FNAL merged commit 5daa448 into main Apr 2, 2026
37 checks passed
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.

5 participants