From iowarp-contributing
Provides contributing guidelines for the IOWarp/Clio ecosystem: git workflow (branch naming, commits, PRs), code standards (C++ style, clang-format, cpplint), and project architecture. Use when making any code contribution.
How this skill is triggered — by the user, by Claude, or both
Slash command
/iowarp-contributing:contributingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are helping a developer contribute to the IOWarp ecosystem. Follow these standards strictly for all code contributions. These guidelines apply to **clio-core** and all related repositories in the IOWarp organization.
You are helping a developer contribute to the IOWarp ecosystem. Follow these standards strictly for all code contributions. These guidelines apply to clio-core and all related repositories in the IOWarp organization.
All feature branches MUST reference a GitHub issue number:
<issue-number>-<short-kebab-description>
Examples:
318-per-container-qtable-load-assessment249-build-dashboard-context-runtime42-fix-zmq-reconnect-timeoutWrite commit messages that explain why, not what. The diff shows what changed.
Format:
<imperative verb> <what changed>
<optional body explaining why, constraints, tradeoffs>
Good examples:
Add per-container load prediction model with online learning
The existing global load model couldn't capture per-container variance
in task execution times. Each container now maintains its own
exponential moving average for both CPU and wall-clock time.
Reset CPU timer and predicted load for periodic task rescheduling
Fix ZMQ reconnect race condition on node failure
The PUSH socket was reconnecting before the PULL socket had
re-bound, causing silent message drops for ~200ms.
Bad examples:
fixed stuffupdate codeWIPchanges to runtimeMerge branch 'main' into feature (squash merge instead)Title: Under 70 characters, imperative voice, references the feature/fix.
Body format:
## Summary
- <1-3 bullet points describing the change>
## Motivation
<Why this change is needed — link to issue>
## Test plan
- [ ] Unit tests pass: `ctest -R <relevant_tests>`
- [ ] No new compiler warnings
- [ ] Code formatted: `clang-format` check passes
- [ ] Headers present on all new files
## Breaking changes
<None, or describe what breaks and migration path>
PR rules:
git rebase origin/main.clang-format, 80-column limit, no tabs)CPPLINT.cfg)Every C/C++ source file (.h, .hpp, .cc, .cpp) MUST have the BSD 3-Clause license header. Use the template from .header_template. Run CI/update_headers.py to auto-apply.
/workspace/build. No in-source builds. No /tmp/build_*.__CUDACC__, __HIPCC__, etc.) — use CTP_IS_GPU, CTP_IS_HOST, CTP_IS_GPU_COMPILER, etc. from context-transport-primitives/include/clio_ctp/constants/macros.h.simple_test.h for unit tests.local if unsure.auto *x = Singleton<T>::GetInstance(); x->var_;| Entity | Convention | Example |
|---|---|---|
| Classes | PascalCase | PoolManager, TaskLane |
| Functions | PascalCase | CreatePool(), GetNodeId() |
| Variables | snake_case with trailing _ for members | pool_id_, container_id_ |
| Constants | kPascalCase | kAdminPoolId, kCtePoolName |
| Macros | UPPER_SNAKE | CTP_IS_GPU, CHI_IPC |
| CMake targets | namespace::component | chimaera::admin_client |
| Module names | lowercase underscore | clio_cte_core, chimaera_admin |
clio-core/
├── context-transport-primitives/ # Shared memory data structures, IPC, GPU support
│ ├── include/clio_ctp/ # Public headers (ctp:: namespace)
│ ├── src/ # Implementation
│ └── docs/MODULE_DEVELOPMENT_GUIDE.md # Module dev guide
│
├── context-runtime/ # Chimaera modular runtime (chi:: namespace)
│ ├── include/chimaera/ # Runtime headers
│ ├── src/scheduler/ # Worker, scheduler implementation
│ ├── modules/ # Built-in ChiMods (admin, bdev)
│ ├── config/ # Default YAML configs
│ └── test/ # Unit + integration tests
│
├── context-transfer-engine/ # I/O buffering engine (clio_cte:: namespace)
│ ├── core/ # CTE Module
│ ├── adapter/ # I/O pathway adapters
│ ├── compressor/ # Compression Module
│ └── config/ # CTE configurations
│
├── context-assimilation-engine/ # Data ingestion (clio_cae:: namespace)
│ ├── core/ # CAE Module
│ └── data/ # OMNI format definitions
│
├── context-exploration-engine/ # Data exploration tools
│ ├── api/ # Python CEE API
│ └── iowarp-cei-mcp/ # MCP server for HDF5
│
├── docker/ # Dockerfiles and deployment configs
├── .devcontainer/ # VS Code devcontainer configs
├── CI/ # CI scripts, sanitizers, header updater
├── cmake/ # CMake helper modules
├── installers/ # conda, pip, spack, vcpkg recipes
├── external/ # Git submodules (hindsight, graphiti, jarvis-cd)
├── AGENTS.md # Development guide and coding standards
└── CMakePresets.json # Build presets
Applications
│
├── context-exploration-engine (CEE)
├── context-assimilation-engine (CAE)
└── context-transfer-engine (CTE)
│
└── context-runtime (Chimaera)
│
└── context-transport-primitives (CTP)
Every component depends on the ones below it. Never create upward dependencies.
Module (Chimaera Module): The fundamental extensibility unit. Each engine (CTE, CAE) is implemented as a Module with a client library and a runtime library.
Task: The unit of work in Chimaera. Tasks are coroutine-based, support cooperative yielding, and are scheduled across worker threads.
Pool: A logical grouping of resources managed by a Module. Each pool has a unique ID and name.
PoolQuery: Determines task routing. Types: Local, Dynamic, Broadcast, DirectHash.
Block Device (bdev): Storage backend abstraction. Types: kRam (memory), kFile (file-backed).
| Repository | Purpose |
|---|---|
| clio-core | Core platform — runtime, transport, engines |
| clio-kit | Developer toolkit and examples |
| clio-agent | Science agent for AI-driven data management |
| docs | Documentation site (Docusaurus) |
| iowarp | Platform installation scripts |
| iowarp-agents | Collection of scientific AI agents |
| memorybench | Memory/RAG benchmark suite |
When making changes, consider cross-repo impact:
docs/docs/deployment/configuration.mdMODULE_DEVELOPMENT_GUIDE.mdThis is the standard workflow for every bug fix and feature. Follow it step by step.
Before writing any code, create an issue that describes the problem or feature:
gh issue create \
--title "Fix: <concise description of the bug or feature>" \
--body "## Description
<What is broken or what needs to be added>
## Steps to Reproduce
1. <step>
2. <step>
## Expected vs Actual Behavior
- **Expected:** <what should happen>
- **Actual:** <what happens instead>
## Acceptance Criteria
- [ ] <testable criterion>
- [ ] <testable criterion>"
For bugs found during exploration, include the error message, stack trace, and the file/line where it occurs. The issue becomes the single source of truth for the work.
git checkout main && git pull origin main
git checkout -b <issue-number>-<short-description>
The branch name MUST start with the issue number. Example: 325-validate-marketplace.
Before implementing any fix, write a test that reproduces the problem:
# Write the test
# Build
cmake --build build -j$(nproc)
# Install (RPATHs require installation)
sudo cmake --install build
# Run and confirm it FAILS
cd build && ctest -R <your_test> -VV
This is critical — a test that fails proves you understand the bug. If you can't write a failing test, you don't understand the problem well enough yet.
For Clio runtime tests, use simple_test.h (NOT Catch2):
#include "../../../context-runtime/test/simple_test.h"
TEST_CASE("Reproduce issue #<N>", "[regression]") {
bool success = chi::CHIMAERA_INIT(chi::ChimaeraMode::kClient, true);
REQUIRE(success);
// ... code that triggers the bug ...
REQUIRE(expected_condition);
}
SIMPLE_TEST_MAIN()
Now implement the fix. Build and verify:
# Build with your changes
cmake --build build -j$(nproc)
sudo cmake --install build
# Verify YOUR test now passes
cd build && ctest -R <your_test> -VV
# Run ALL tests to check for regressions
ctest -VV
Both must succeed: your new test passes AND no existing tests break.
# Stage specific files (never `git add -A`)
git add <changed files>
git commit -m "Fix <description>
Closes #<issue-number>"
# Push and create PR
git push -u origin <issue-number>-<description>
gh pr create \
--title "Fix <concise description>" \
--body "## Summary
- <what changed and why>
## Motivation
Fixes #<issue-number>
## Test plan
- [ ] New regression test passes: \`ctest -R <test_name>\`
- [ ] All existing tests pass: \`ctest -VV\`
- [ ] No new compiler warnings
- [ ] Code formatted with clang-format
- [ ] BSD 3-Clause headers on all new files
## Breaking changes
None"
git checkout main && git pull origin main
git checkout -b <issue-number>-<description>
cmake --preset=debug && cmake --build build -j$(nproc)
cd build && ctest -VV
cmake --build build -j$(nproc)sudo cmake --install build (RPATHs, not LD_LIBRARY_PATH)ctest -R <component>Use the right agent for the job:
incremental-logic-builder — for code changescode-compilation-reviewer — after making CMake or code changesunit-test-generator — for new test coveragecpp-debug-analyzer — for runtime crashes or memory issuesdockerfile-ci-expert — for Docker or CI changessimple_test.h (NOT Catch2) for Clio runtime testschi::CHIMAERA_INIT(chi::ChimaeraMode::kClient, true)ASSERT_EQ(client.GetReturnCode(), 0) after Create operationsbash CI/run_sanitizers.shEvery PR triggers:
All must pass before merge.
# 1. Create issue
gh issue create --title "Fix: ZMQ reconnect timeout" --body "..."
# 2. Branch from issue
git checkout main && git pull origin main
git checkout -b 42-fix-zmq-timeout
# 3. Write failing test, verify it fails
cmake --build build -j$(nproc) && sudo cmake --install build
cd build && ctest -R my_new_test -VV # Should FAIL
# 4. Implement fix, verify all pass
cmake --build build -j$(nproc) && sudo cmake --install build
cd build && ctest -VV # ALL should PASS
# 5. Commit and PR
git add <specific files>
git commit -m "Fix ZMQ reconnect timeout
Closes #42"
git push -u origin 42-fix-zmq-timeout
gh pr create --title "Fix ZMQ reconnect timeout" --body "Fixes #42 ..."
# Other useful commands
clang-format -style=file -i <file> # Format check
python3 CI/update_headers.py # Header update
cpplint --filter=-legal/copyright <f> # Lint
bash CI/run_sanitizers.sh --asan # Sanitizers
npx claudepluginhub iowarp/clio-core --plugin iowarp-contributingSetup, build, and debug IOWarp Core locally via Docker devcontainers or native Linux. Covers prerequisites, build commands, test suites, and troubleshooting.
Guides large-scale C++ projects with CMake Presets, vcpkg/Conan dependency management, ccache/sccache build acceleration, clang-tidy/cppcheck static analysis, and physical design.
Provides structured workflow packs for 7 common Claude Code tasks: codebase exploration, bug fixing, safe refactoring, TDD, repo review before merge, CLAUDE.md generation, and migration planning.