NCAR / NCAR/ccpp-framework

ccpp-capgen v1: a unified successor to ccpp-prebuild and ccpp-capgen v0

Open
#759 4 comments 0 reactions 1 assignee View on GitHub

@climbfuji is already working on this.

Since May 13, 2026.

Dominant language
Python
Stars
25
Forks
67
Avg merge
3d 8h
Merged PRs (30d)
2

Description

Description

Note. ccpp-capgen v1 was previously called ccpp-capgen-ng. Some of the supporting documents attached below (until 2026-06-28) use this terminology.

ccpp-capgen v1 is a next-generation code generator for the CCPP framework. It is not a criticism of the existing tools — both ccpp-prebuild and ccpp-capgen v0 have served their respective communities well and embody years of careful design. This project attempts to synthesize the strengths of both: the performance of ccpp-prebuild and the metadata richness and feature set of ccpp-capgen v0, while also taking advantage of relaxed code-generator requirements that have emerged over time and lessons learned from operating both tools in development, research, and production. It also aims to resolve several outstanding issues that have been blocking progress toward a long-discussed unification of the two code generators.

Supporting documents — including a redesign analysis, the LLM prompt used to bootstrap development, developer and user documentation, and a migration guide — will be provided as part of the draft pull request.

The code was developed with the assistance of an LLM (Claude, by Anthropic) as a coding partner. Where possible, existing code was reused and repackaged.

Testing

Python docstring tests, unit tests

Significantly expanded test coverage with Python docstring tests and 1500-ish unit tests. Run in CI, all pass.

End-to-end tests

The following tests and features are currently supported by ccpp-capgen v1. They run successfullly in CI and on my development boxes.

  • Former ccpp-capgen v0 tests:
    • advection
    • advection_auto_clone (support legacy constituents auto-cloning from metadata)
    • capgen_ng
    • ddthost
    • nested_suite
    • var_compat
  • Former ccpp-prebuild tests:
    • chunked_data
    • blocked-data not supported in capgen or capgen-ng
    • opt_arg
  • Newly added features/tests:
    • multi-instances
    • multi-instances + constituents
    • suite_allocate (exercises suite-owned variables with various types of runtime-known dimensions)
    • constituents_dim (suite- and host-owned variables with dimensions from constituents objects)
Host model integration

Issues

A list of issues that will be addressed with this issue will be provided in the associated pull request.

Addressing this issue will also address/close the following issues if/when the participating host models switch to capgen-ng:

To check/may not be implemented yet:

Working towards:

Supporting Materials

See doc/ folder in the feature/capgen-v1 - documents evolved over time (commit history).

The documents were produced by Claude during development and most have them have not been formally reviewed. They are shared for transparency and to give context for the design decisions made. They should be treated as starting points rather than authoritative references.

An update of the CCPP technical documentation is made in https://github.com/NCAR/ccpp-doc/pull/81.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.