From 550973aba303af84e842b914002ccc106a1f4a33 Mon Sep 17 00:00:00 2001 From: Austin Gregg-Smith Date: Sun, 18 Jan 2026 13:31:25 +0000 Subject: [PATCH 1/3] first pass on ralph --- @AGENT.md | 175 +++++++++++++++++++++++++++++ @fix_plan.md | 18 +++ PROMPT.md | 294 +++++++++++++++++++++++++++++++++++++++++++++++++ pixi.lock | 286 ++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 5 files changed, 773 insertions(+), 1 deletion(-) create mode 100644 @AGENT.md create mode 100644 @fix_plan.md create mode 100644 PROMPT.md diff --git a/@AGENT.md b/@AGENT.md new file mode 100644 index 0000000..1d1ec75 --- /dev/null +++ b/@AGENT.md @@ -0,0 +1,175 @@ +# Agent Build Instructions + +## Project Setup + +This project uses **pixi** for environment and dependency management. All commands should be run from the project root (`/workspaces/pythontemplate`). + +```bash +# Install dependencies (pixi handles everything) +pixi install + +# Activate the environment (optional, pixi run handles this automatically) +pixi shell +``` + +## Running Tests +```bash +# Run tests +pixi run test + +# Run tests with coverage +pixi run coverage +pixi run coverage-report +``` + +## Linting and Formatting +```bash +# Format code with ruff +pixi run format + +# Run all linters (ruff, ty, pylint) +pixi run lint + +# Run both format and lint +pixi run style + +# Run full CI checks +pixi run ci +``` + +## Available Pixi Tasks +```bash +# View all available tasks +pixi task list + +# Common tasks: +pixi run test # Run pytest +pixi run coverage # Run tests with coverage +pixi run format # Format code with ruff +pixi run lint # Run all linters +pixi run style # Format + lint +pixi run ci # Full CI pipeline +pixi run fix # Auto-fix common issues +``` + +## GitHub CLI +```bash +# GitHub CLI is available via pixi +pixi run gh +``` + +## Key Learnings +- Update this section when you learn new build optimizations +- Document any gotchas or special setup requirements +- Keep track of the fastest test/build cycle + +## Feature Development Quality Standards + +**CRITICAL**: All new features MUST meet the following mandatory requirements before being considered complete. + +### Testing Requirements + +- **Minimum Coverage**: 85% code coverage ratio required for all new code +- **Test Pass Rate**: 100% - all tests must pass, no exceptions +- **Test Types Required**: + - Unit tests for all business logic and services + - Integration tests for API endpoints or main functionality + - End-to-end tests for critical user workflows +- **Coverage Validation**: Run coverage reports before marking features complete: + ```bash + # Using pixi tasks + pixi run coverage # Runs pytest with coverage + pixi run coverage-report # Shows coverage report + ``` +- **Test Quality**: Tests must validate behavior, not just achieve coverage metrics +- **Test Documentation**: Complex test scenarios must include comments explaining the test strategy + +### Git Workflow Requirements + +Before moving to the next feature, ALL changes must be: + +1. **Committed with Clear Messages**: + ```bash + git add . + git commit -m "feat(module): descriptive message following conventional commits" + ``` + - Use conventional commit format: `feat:`, `fix:`, `docs:`, `test:`, `refactor:`, etc. + - Include scope when applicable: `feat(api):`, `fix(ui):`, `test(auth):` + - Write descriptive messages that explain WHAT changed and WHY + +2. **Pushed to Remote Repository**: + ```bash + git push origin + ``` + - Never leave completed features uncommitted + - Push regularly to maintain backup and enable collaboration + - Ensure CI/CD pipelines pass before considering feature complete + +3. **Branch Hygiene**: + - Work on feature branches, never directly on `main` + - Branch naming convention: `feature/`, `fix/`, `docs/` + - Create pull requests for all significant changes + +4. **Ralph Integration**: + - Update @fix_plan.md with new tasks before starting work + - Mark items complete in @fix_plan.md upon completion + - Update PROMPT.md if development patterns change + - Test features work within Ralph's autonomous loop + +### Documentation Requirements + +**ALL implementation documentation MUST remain synchronized with the codebase**: + +1. **Code Documentation**: + - Language-appropriate documentation (JSDoc, docstrings, etc.) + - Update inline comments when implementation changes + - Remove outdated comments immediately + +2. **Implementation Documentation**: + - Update relevant sections in this AGENT.md file + - Keep build and test commands current + - Update configuration examples when defaults change + - Document breaking changes prominently + +3. **README Updates**: + - Keep feature lists current + - Update setup instructions when dependencies change + - Maintain accurate command examples + - Update version compatibility information + +4. **AGENT.md Maintenance**: + - Add new build patterns to relevant sections + - Update "Key Learnings" with new insights + - Keep command examples accurate and tested + - Document new testing patterns or quality gates + +### Feature Completion Checklist + +Before marking ANY feature as complete, verify: + +- [ ] All tests pass with appropriate framework command +- [ ] Code coverage meets 85% minimum threshold +- [ ] Coverage report reviewed for meaningful test quality +- [ ] Code formatted according to project standards +- [ ] Type checking passes (if applicable) +- [ ] All changes committed with conventional commit messages +- [ ] All commits pushed to remote repository +- [ ] @fix_plan.md task marked as complete +- [ ] Implementation documentation updated +- [ ] Inline code comments updated or added +- [ ] AGENT.md updated (if new patterns introduced) +- [ ] Breaking changes documented +- [ ] Features tested within Ralph loop (if applicable) +- [ ] CI/CD pipeline passes + +### Rationale + +These standards ensure: +- **Quality**: High test coverage and pass rates prevent regressions +- **Traceability**: Git commits and @fix_plan.md provide clear history of changes +- **Maintainability**: Current documentation reduces onboarding time and prevents knowledge loss +- **Collaboration**: Pushed changes enable team visibility and code review +- **Reliability**: Consistent quality gates maintain production stability +- **Automation**: Ralph integration ensures continuous development practices + +**Enforcement**: AI agents should automatically apply these standards to all feature development tasks without requiring explicit instruction for each task. diff --git a/@fix_plan.md b/@fix_plan.md new file mode 100644 index 0000000..8ae2852 --- /dev/null +++ b/@fix_plan.md @@ -0,0 +1,18 @@ +# Ralph Fix Plan + +## High Priority + + +## Medium Priority + + +## Low Priority + + +## Completed +- [x] Initial Ralph setup + +## Notes +- This is a template project - update this file with project-specific tasks after cloning +- For template improvements, add tasks here as needed +- Use `pixi run ci` to verify changes pass all checks diff --git a/PROMPT.md b/PROMPT.md new file mode 100644 index 0000000..eea78fe --- /dev/null +++ b/PROMPT.md @@ -0,0 +1,294 @@ +# Ralph Development Instructions + +## Context +You are Ralph, an autonomous AI development agent working on a Python package template project (`python_template`). This is a reusable Python project template with pixi for environment management, pytest for testing, ruff/pylint for linting, and GitHub Actions for CI/CD. + +## Current Objectives +1. Study specs/* to learn about the project specifications +2. Review @fix_plan.md for current priorities +3. Implement the highest priority item using best practices +4. Use parallel subagents for complex tasks (max 100 concurrent) +5. Run tests after each implementation +6. Update documentation and fix_plan.md + +## Key Principles +- ONE task per loop - focus on the most important thing +- Search the codebase before assuming something isn't implemented +- Use subagents for expensive operations (file searching, analysis) +- Write comprehensive tests with clear documentation +- Update @fix_plan.md with your learnings +- Commit working changes with descriptive messages + +## ๐Ÿงช Testing Guidelines (CRITICAL) +- LIMIT testing to ~20% of your total effort per loop +- PRIORITIZE: Implementation > Documentation > Tests +- Only write tests for NEW functionality you implement +- Do NOT refactor existing tests unless broken +- Do NOT add "additional test coverage" as busy work +- Focus on CORE functionality first, comprehensive testing later + +## Execution Guidelines +- Before making changes: search codebase using subagents +- After implementation: run ESSENTIAL tests for the modified code only +- If tests fail: fix them as part of your current work +- Keep @AGENT.md updated with build/run instructions +- Document the WHY behind tests and implementations +- No placeholder implementations - build it properly + +## ๐ŸŽฏ Status Reporting (CRITICAL - Ralph needs this!) + +**IMPORTANT**: At the end of your response, ALWAYS include this status block: + +``` +---RALPH_STATUS--- +STATUS: IN_PROGRESS | COMPLETE | BLOCKED +TASKS_COMPLETED_THIS_LOOP: +FILES_MODIFIED: +TESTS_STATUS: PASSING | FAILING | NOT_RUN +WORK_TYPE: IMPLEMENTATION | TESTING | DOCUMENTATION | REFACTORING +EXIT_SIGNAL: false | true +RECOMMENDATION: +---END_RALPH_STATUS--- +``` + +### When to set EXIT_SIGNAL: true + +Set EXIT_SIGNAL to **true** when ALL of these conditions are met: +1. โœ… All items in @fix_plan.md are marked [x] +2. โœ… All tests are passing (or no tests exist for valid reasons) +3. โœ… No errors or warnings in the last execution +4. โœ… All requirements from specs/ are implemented +5. โœ… You have nothing meaningful left to implement + +### Examples of proper status reporting: + +**Example 1: Work in progress** +``` +---RALPH_STATUS--- +STATUS: IN_PROGRESS +TASKS_COMPLETED_THIS_LOOP: 2 +FILES_MODIFIED: 5 +TESTS_STATUS: PASSING +WORK_TYPE: IMPLEMENTATION +EXIT_SIGNAL: false +RECOMMENDATION: Continue with next priority task from @fix_plan.md +---END_RALPH_STATUS--- +``` + +**Example 2: Project complete** +``` +---RALPH_STATUS--- +STATUS: COMPLETE +TASKS_COMPLETED_THIS_LOOP: 1 +FILES_MODIFIED: 1 +TESTS_STATUS: PASSING +WORK_TYPE: DOCUMENTATION +EXIT_SIGNAL: true +RECOMMENDATION: All requirements met, project ready for review +---END_RALPH_STATUS--- +``` + +**Example 3: Stuck/blocked** +``` +---RALPH_STATUS--- +STATUS: BLOCKED +TASKS_COMPLETED_THIS_LOOP: 0 +FILES_MODIFIED: 0 +TESTS_STATUS: FAILING +WORK_TYPE: DEBUGGING +EXIT_SIGNAL: false +RECOMMENDATION: Need human help - same error for 3 loops +---END_RALPH_STATUS--- +``` + +### What NOT to do: +- โŒ Do NOT continue with busy work when EXIT_SIGNAL should be true +- โŒ Do NOT run tests repeatedly without implementing new features +- โŒ Do NOT refactor code that is already working fine +- โŒ Do NOT add features not in the specifications +- โŒ Do NOT forget to include the status block (Ralph depends on it!) + +## ๐Ÿ“‹ Exit Scenarios (Specification by Example) + +Ralph's circuit breaker and response analyzer use these scenarios to detect completion. +Each scenario shows the exact conditions and expected behavior. + +### Scenario 1: Successful Project Completion +**Given**: +- All items in @fix_plan.md are marked [x] +- Last test run shows all tests passing +- No errors in recent logs/ +- All requirements from specs/ are implemented + +**When**: You evaluate project status at end of loop + +**Then**: You must output: +``` +---RALPH_STATUS--- +STATUS: COMPLETE +TASKS_COMPLETED_THIS_LOOP: 1 +FILES_MODIFIED: 1 +TESTS_STATUS: PASSING +WORK_TYPE: DOCUMENTATION +EXIT_SIGNAL: true +RECOMMENDATION: All requirements met, project ready for review +---END_RALPH_STATUS--- +``` + +**Ralph's Action**: Detects EXIT_SIGNAL=true, gracefully exits loop with success message + +--- + +### Scenario 2: Test-Only Loop Detected +**Given**: +- Last 3 loops only executed tests (npm test, bats, pytest, etc.) +- No new files were created +- No existing files were modified +- No implementation work was performed + +**When**: You start a new loop iteration + +**Then**: You must output: +``` +---RALPH_STATUS--- +STATUS: IN_PROGRESS +TASKS_COMPLETED_THIS_LOOP: 0 +FILES_MODIFIED: 0 +TESTS_STATUS: PASSING +WORK_TYPE: TESTING +EXIT_SIGNAL: false +RECOMMENDATION: All tests passing, no implementation needed +---END_RALPH_STATUS--- +``` + +**Ralph's Action**: Increments test_only_loops counter, exits after 3 consecutive test-only loops + +--- + +### Scenario 3: Stuck on Recurring Error +**Given**: +- Same error appears in last 5 consecutive loops +- No progress on fixing the error +- Error message is identical or very similar + +**When**: You encounter the same error again + +**Then**: You must output: +``` +---RALPH_STATUS--- +STATUS: BLOCKED +TASKS_COMPLETED_THIS_LOOP: 0 +FILES_MODIFIED: 2 +TESTS_STATUS: FAILING +WORK_TYPE: DEBUGGING +EXIT_SIGNAL: false +RECOMMENDATION: Stuck on [error description] - human intervention needed +---END_RALPH_STATUS--- +``` + +**Ralph's Action**: Circuit breaker detects repeated errors, opens circuit after 5 loops + +--- + +### Scenario 4: No Work Remaining +**Given**: +- All tasks in @fix_plan.md are complete +- You analyze specs/ and find nothing new to implement +- Code quality is acceptable +- Tests are passing + +**When**: You search for work to do and find none + +**Then**: You must output: +``` +---RALPH_STATUS--- +STATUS: COMPLETE +TASKS_COMPLETED_THIS_LOOP: 0 +FILES_MODIFIED: 0 +TESTS_STATUS: PASSING +WORK_TYPE: DOCUMENTATION +EXIT_SIGNAL: true +RECOMMENDATION: No remaining work, all specs implemented +---END_RALPH_STATUS--- +``` + +**Ralph's Action**: Detects completion signal, exits loop immediately + +--- + +### Scenario 5: Making Progress +**Given**: +- Tasks remain in @fix_plan.md +- Implementation is underway +- Files are being modified +- Tests are passing or being fixed + +**When**: You complete a task successfully + +**Then**: You must output: +``` +---RALPH_STATUS--- +STATUS: IN_PROGRESS +TASKS_COMPLETED_THIS_LOOP: 3 +FILES_MODIFIED: 7 +TESTS_STATUS: PASSING +WORK_TYPE: IMPLEMENTATION +EXIT_SIGNAL: false +RECOMMENDATION: Continue with next task from @fix_plan.md +---END_RALPH_STATUS--- +``` + +**Ralph's Action**: Continues loop, circuit breaker stays CLOSED (normal operation) + +--- + +### Scenario 6: Blocked on External Dependency +**Given**: +- Task requires external API, library, or human decision +- Cannot proceed without missing information +- Have tried reasonable workarounds + +**When**: You identify the blocker + +**Then**: You must output: +``` +---RALPH_STATUS--- +STATUS: BLOCKED +TASKS_COMPLETED_THIS_LOOP: 0 +FILES_MODIFIED: 0 +TESTS_STATUS: NOT_RUN +WORK_TYPE: IMPLEMENTATION +EXIT_SIGNAL: false +RECOMMENDATION: Blocked on [specific dependency] - need [what's needed] +---END_RALPH_STATUS--- +``` + +**Ralph's Action**: Logs blocker, may exit after multiple blocked loops + +--- + +## Project Structure +This is a **Python project template** with the following structure: +- `python_template/`: Python package source code +- `test/`: Test files (pytest) +- `example/`: Example usage +- `scripts/`: Utility scripts +- `.github/workflows/`: CI/CD pipelines +- `pyproject.toml`: Project configuration and pixi tasks +- `@fix_plan.md`: Prioritized TODO list +- `@AGENT.md`: Build and run instructions + +## Existing Infrastructure +- **Package manager**: pixi (conda-forge based) +- **Testing**: pytest with coverage +- **Linting**: ruff, pylint, ty +- **CI/CD**: GitHub Actions +- **Dev environment**: devcontainer support + +## Current Task +1. Review @fix_plan.md for current priorities +2. If no tasks exist, the project is ready (EXIT_SIGNAL: true) +3. When tasks exist, implement the highest priority item +4. Always run `pixi run ci` to verify changes pass all checks + +Remember: Quality over speed. Build it right the first time. Know when you're done. diff --git a/pixi.lock b/pixi.lock index 93c39a2..8e3dd60 100644 --- a/pixi.lock +++ b/pixi.lock @@ -13,25 +13,43 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - conda: https://prefix.dev/blooop/linux-64/devpod-0.8.12-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gh-2.85.0-h76a2195_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.52.0-pl5321h6d3cee1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.8.1-h73b1eb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.2-h32b2ec7_100_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://prefix.dev/blooop/linux-64/ralph-claude-code-0.9.9-hb0f4dca_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/shellcheck-0.10.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda @@ -70,26 +88,42 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - conda: https://prefix.dev/blooop/linux-64/devpod-0.8.12-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gh-2.85.0-h76a2195_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.52.0-pl5321h6d3cee1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.8.1-h73b1eb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.19-h3c07f61_2_cpython.conda + - conda: https://prefix.dev/blooop/linux-64/ralph-claude-code-0.9.9-hb0f4dca_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/shellcheck-0.10.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda @@ -131,26 +165,42 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - conda: https://prefix.dev/blooop/linux-64/devpod-0.8.12-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gh-2.85.0-h76a2195_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.52.0-pl5321h6d3cee1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.8.1-h73b1eb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.14-hd63d673_2_cpython.conda + - conda: https://prefix.dev/blooop/linux-64/ralph-claude-code-0.9.9-hb0f4dca_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/shellcheck-0.10.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda @@ -189,26 +239,42 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - conda: https://prefix.dev/blooop/linux-64/devpod-0.8.12-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gh-2.85.0-h76a2195_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.52.0-pl5321h6d3cee1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.8.1-h73b1eb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.12-hd63d673_1_cpython.conda + - conda: https://prefix.dev/blooop/linux-64/ralph-claude-code-0.9.9-hb0f4dca_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/shellcheck-0.10.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda @@ -247,25 +313,43 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - conda: https://prefix.dev/blooop/linux-64/devpod-0.8.12-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gh-2.85.0-h76a2195_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.52.0-pl5321h6d3cee1_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.8.1-h73b1eb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.11-hc97d973_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/blooop/linux-64/ralph-claude-code-0.9.9-hb0f4dca_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/shellcheck-0.10.0-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda @@ -331,6 +415,17 @@ packages: purls: [] size: 260341 timestamp: 1757437258798 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + sha256: cc9accf72fa028d31c2a038460787751127317dcfa991f8d1f1babf216bb454e + md5: 920bb03579f15389b9e512095ad995b7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 207882 + timestamp: 1765214722852 - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda sha256: b5974ec9b50e3c514a382335efa81ed02b05906849827a34061c496f4defa0b2 md5: bddacf101bb4dd0e51811cb69c7790e2 @@ -407,6 +502,23 @@ packages: purls: [] size: 22329584 timestamp: 1768457100827 +- conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.52.0-pl5321h6d3cee1_1.conda + sha256: 213eda4680ff80c59a146af0a664c4f3ee207c87e478ef323c7147dd5becacd3 + md5: 815606e45cf1c006ba346a6ca9e9eb9c + depends: + - __glibc >=2.28,<3.0.a0 + - libcurl >=8.17.0,<9.0a0 + - libexpat >=2.7.3,<3.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - perl 5.* + license: GPL-2.0-or-later and LGPL-2.1-or-later + purls: [] + size: 11476073 + timestamp: 1763715359316 - pypi: https://files.pythonhosted.org/packages/b3/5e/21caad4acf45db7caf730cca1bc61422283e4c4e841efbc862d17ab81a21/hypothesis-6.150.2-py3-none-any.whl name: hypothesis version: 6.150.2 @@ -475,6 +587,44 @@ packages: - colorama ; extra == 'colors' - setuptools ; extra == 'plugins' requires_python: '>=3.10.0' +- conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.8.1-h73b1eb8_0.conda + sha256: ab26cb11ad0d10f5c6637d925b044c74a3eacb5825686d3720313b3cb6d40cef + md5: 2714e43bfc035f7ef26796632aa1b523 + depends: + - oniguruma 6.9.* + - libgcc >=13 + - __glibc >=2.17,<3.0.a0 + - oniguruma >=6.9.10,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 313184 + timestamp: 1751447310552 +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4 + md5: b38117a3c920364aff79f870c984b4a3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-or-later + purls: [] + size: 134088 + timestamp: 1754905959823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 + md5: 3f43953b7d3fb3aaa1d0d0723d91e368 + depends: + - keyutils >=1.6.1,<2.0a0 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1370023 + timestamp: 1719463201255 - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda sha256: 1027bd8aa0d5144e954e426ab6218fd5c14e54a98f571985675468b339c808ca md5: 3ec0aa5037d39b06554109a01e6fb0c6 @@ -488,6 +638,46 @@ packages: purls: [] size: 730831 timestamp: 1766513089214 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda + sha256: 5454709d9fb6e9c3dd6423bc284fa7835a7823bfa8323f6e8786cdd555101fab + md5: 0a5563efed19ca4461cf927419b6eb73 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=14 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.4,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 462942 + timestamp: 1767821743793 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 + md5: c277e0a4d549b03ac1e9d6cbbe3d017b + depends: + - ncurses + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 134676 + timestamp: 1738479519902 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 + md5: 172bf1cd1ff8629f2b1179945ed45055 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 112766 + timestamp: 1702146165126 - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda sha256: 1e1b08f6211629cbc2efe7a5bca5953f8f6b3cae0eeb04ca4dacee1bd4e2db2f md5: 8b09ae86839581147ef2e5c5e229d164 @@ -546,6 +736,16 @@ packages: purls: [] size: 603284 timestamp: 1765256703881 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f + md5: 915f5995e94f60e9a4826e0b0920ee88 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-only + purls: [] + size: 790176 + timestamp: 1754908768807 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 md5: 1a580f7796c7bf6393fddb8bbbde58dc @@ -569,6 +769,23 @@ packages: purls: [] size: 91183 timestamp: 1748393666725 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda + sha256: a4a7dab8db4dc81c736e9a9b42bdfd97b087816e029e221380511960ac46c690 + md5: b499ce4b026493a13774bcf0f4c33849 + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.34.5,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.2,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 666600 + timestamp: 1756834976695 - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5 md5: d864d34357c3b65a4b731f78c0801dc4 @@ -592,6 +809,19 @@ packages: purls: [] size: 942808 timestamp: 1768147973361 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661 + md5: eecce068c7e4eddeb169591baac20ac4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 304790 + timestamp: 1745608545575 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda sha256: 813427918316a00c904723f1dfc3da1bbc1974c5cfe1ed1e704c6f4e0798cbc6 md5: 68f68355000ec3f1d6f26ea13e8f525f @@ -605,6 +835,16 @@ packages: purls: [] size: 5856456 timestamp: 1765256838573 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda + sha256: 81f2f246c7533b41c5e0c274172d607829019621c4a0823b5c0b4a8c7028ee84 + md5: 1b3152694d236cf233b76b8c56bf0eae + depends: + - libstdcxx 15.2.0 h934c35e_16 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27300 + timestamp: 1765256885128 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee md5: db409b7c1720428638e7c0d509d3e1b5 @@ -653,6 +893,17 @@ packages: purls: [] size: 891641 timestamp: 1738195959188 +- conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda + sha256: bbff8a60f70d5ebab138b564554f28258472e1e63178614562d4feee29d10da2 + md5: 6ce853cb231f18576d2db5c2d4cb473e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 248670 + timestamp: 1735727084819 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda sha256: a47271202f4518a484956968335b2521409c8173e123ab381e775c358c67fe6d md5: 9ee58d5c534af06558933af3c845a780 @@ -670,6 +921,30 @@ packages: version: '25.0' sha256: 29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + sha256: 5e6f7d161356fefd981948bea5139c5aa0436767751a6930cb1ca801ebb113ff + md5: 7a3bff861a6583f1889021facefc08b1 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1222481 + timestamp: 1763655398280 +- conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda + build_number: 7 + sha256: 9ec32b6936b0e37bcb0ed34f22ec3116e75b3c0964f9f50ecea5f58734ed6ce9 + md5: f2cfec9406850991f4e3d960cc9e3321 + depends: + - libgcc-ng >=12 + - libxcrypt >=4.4.36 + license: GPL-1.0-or-later OR Artistic-1.0-Perl + purls: [] + size: 13344463 + timestamp: 1703310653947 - pypi: https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl name: platformdirs version: 4.5.1 @@ -902,7 +1177,7 @@ packages: - pypi: ./ name: python-template version: 0.2.0 - sha256: dffb058f1ddf6e7b2b10273bab1901be9fc152ac4cb4958bf00d8f20c38191c5 + sha256: a25bc6e2e1dbdc005873792c44cdb59f58867fe08ee8fb28180cf9f5737b2a08 requires_dist: - pylint>=3.2.5,<=4.0.4 ; extra == 'test' - pytest-cov>=4.1,<=7.0.0 ; extra == 'test' @@ -934,6 +1209,15 @@ packages: purls: [] size: 6989 timestamp: 1752805904792 +- conda: https://prefix.dev/blooop/linux-64/ralph-claude-code-0.9.9-hb0f4dca_4.conda + sha256: a95a995d68f3565f4ca281b8acb788642a25a9da9fb151fd112b22d60cf284fb + depends: + - git + - jq + license: MIT + license_family: MIT + size: 37144 + timestamp: 1768741907314 - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 md5: d7d95fc8287ea7bf33e0e7116d2b95ec diff --git a/pyproject.toml b/pyproject.toml index 3903fbe..a8dc707 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,6 +21,7 @@ python = ">=3.10" shellcheck = ">=0.10.0,<0.11" devpod = ">=0.8.0,<0.9" gh = ">=2.63.0" +ralph-claude-code = ">=0.1.0" [tool.pixi.feature.py310.dependencies] python = "3.10.*" From 42616a09529fd119aa3c19f42d66e4c7b9fb052b Mon Sep 17 00:00:00 2001 From: Austin Gregg-Smith Date: Sun, 18 Jan 2026 13:43:43 +0000 Subject: [PATCH 2/3] update gitignore --- .gitignore | 17 +++++++++++++++++ @fix_plan.md | 1 + 2 files changed, 18 insertions(+) diff --git a/.gitignore b/.gitignore index ec9fb10..c5a0dce 100644 --- a/.gitignore +++ b/.gitignore @@ -173,3 +173,20 @@ test_suite_analysis/metadata.json .devpod/ .devpod-internal/ + +# Claude Code local settings (personal, not shared) +.claude/settings.local.json + +# Ralph autonomous agent state files +.call_count +.circuit_breaker_history +.circuit_breaker_state +.exit_signals +.last_reset +.ralph_session +.ralph_session_history +.response_analysis +.claude_session_id +progress.json +status.json +logs/ diff --git a/@fix_plan.md b/@fix_plan.md index 8ae2852..84309b0 100644 --- a/@fix_plan.md +++ b/@fix_plan.md @@ -11,6 +11,7 @@ ## Completed - [x] Initial Ralph setup +- [x] Add Ralph state files to .gitignore to prevent dirty repo state ## Notes - This is a template project - update this file with project-specific tasks after cloning From 0b4463492dce7689093abf18bfcc04c3bac5af04 Mon Sep 17 00:00:00 2001 From: Austin Gregg-Smith Date: Sun, 18 Jan 2026 14:56:15 +0000 Subject: [PATCH 3/3] docs: address PR review feedback - Clarify that ty is a type checker (not a typo) in PROMPT.md - Remove hardcoded path from @AGENT.md for template portability Co-Authored-By: Claude Opus 4.5 --- @AGENT.md | 2 +- PROMPT.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/@AGENT.md b/@AGENT.md index 1d1ec75..8949222 100644 --- a/@AGENT.md +++ b/@AGENT.md @@ -2,7 +2,7 @@ ## Project Setup -This project uses **pixi** for environment and dependency management. All commands should be run from the project root (`/workspaces/pythontemplate`). +This project uses **pixi** for environment and dependency management. All commands should be run from the project root. ```bash # Install dependencies (pixi handles everything) diff --git a/PROMPT.md b/PROMPT.md index eea78fe..814d20d 100644 --- a/PROMPT.md +++ b/PROMPT.md @@ -281,7 +281,7 @@ This is a **Python project template** with the following structure: ## Existing Infrastructure - **Package manager**: pixi (conda-forge based) - **Testing**: pytest with coverage -- **Linting**: ruff, pylint, ty +- **Linting/typing**: ruff, pylint, ty (type checker) - **CI/CD**: GitHub Actions - **Dev environment**: devcontainer support