Skip to content

Release/v0.9.0 - #79

Merged
lchoquel merged 37 commits into
mainfrom
release/v0.9.0
Aug 1, 2026
Merged

Release/v0.9.0#79
lchoquel merged 37 commits into
mainfrom
release/v0.9.0

Conversation

@lchoquel

@lchoquel lchoquel commented Aug 1, 2026

Copy link
Copy Markdown
Member

Release v0.9.0

Bumps version from 0.8.0 to 0.9.0.

Changelog

Changed

  • Swept onto pipelex 0.42.0 (pipelex[...]==0.39.0==0.42.0, crossing three release cycles). Despite 0.41.0 being the largest breaking core release of the year, the blast radius here is small — cocode drives pipelex through its public run surface rather than its internals, so only two addresses moved: pipelex.hub was deleted with no shim (split into pipelex.runtime_hub / pipelex.interpreter_hub by owning layer, and get_required_concept is interpreter-layer), and PipeRunMode moved from pipelex.pipe_run.pipe_run_mode to pipelex.system.pipe_run_mode. Nothing in the parser move, the Pipe-machinery move, the pipelex.providers vendor rename, or the Concept-becomes-pure-data change reaches this repo. From 0.42.0, the only change that reaches us is strict PipeFunc name collisions — see the fix below.
  • Pipelines: Custom PipeFunc functions are now registered solely through the @pipe_func() decorator; the redundant manual func_registry.register_function(...) calls in doc_proofread/file_utils.py and pipelines/text_utils.py are gone. split_text_by_identifiers gains the decorator it was missing, so it no longer depends on the class-registry scan importing its module as a side effect.
  • CI: Added Python 3.14 to the lint and test matrices, so every version advertised in the package classifiers is now actually tested.
  • CI: Bumped actions/setup-python from v4 to v6 in the lint and test workflows. v4 targets the Node 16 runtime, which the runners only still execute via a forced fallback; v6 is the first major on Node 24. Note that v5 would not have helped — it targets the equally deprecated Node 20.
  • Core: Import StrEnum from the stdlib enum module instead of the pipelex.types re-export, which upstream deleted along with its own 3.10 support.
  • Tooling: Point mypy at local paths (files) rather than module names (packages), so an editable pipelex checkout on the import path no longer drags that repo's test suite into our type check.

Fixed

  • Pipelines: Every cocode command crashed at startup on pipelex 0.42.0 with FuncRegistryError: Function name 'read_file_content' is already registered by a different function. file_utils.py registered read_file_content twice — once when imported as a package module by swe_cmd.py, once when pipelex's folder scan re-imported the same file by path under a mangled module name — and 0.42.0 turned that silent overwrite into a hard error. Dropping the manual registration leaves the decorator-driven scan as the single registration path.

Removed

  • Python: Dropped support for Python 3.10 (breaking). The minimum supported version is now Python 3.11, matching the version the type-checkers and linter already target.

🤖 Generated with Claude Code


Summary by cubic

Release v0.9.0 upgrades to pipelex 0.42.0, standardizes PipeFunc registration, and drops Python 3.10. Fixes a startup crash caused by duplicate function registration and updates CI to test Python 3.11–3.14.

  • Dependencies

    • Bumped pipelex to 0.42.0; updated imports to pipelex.interpreter_hub and pipelex.system.pipe_run_mode.
    • Switched to stdlib enum.StrEnum (upstream removed the pipelex.types re-export).
    • Raised minimum Python to >=3.11 (breaking) and added 3.14 to CI.
    • Updated actions/setup-python to v6; bumped pyright to >=1.1.411.
    • Pointed mypy to files paths to avoid pulling in editable pipelex tests.
  • Bug Fixes

    • Removed manual PipeFunc registrations; use @pipe_func() exclusively.
    • Added the missing decorator to split_text_by_identifiers.
    • Resolved FuncRegistryError on startup under pipelex 0.42.0 caused by duplicate registration of read_file_content.

Written for commit c0e664e. Summary will update on new commits.

Review in cubic

lchoquel and others added 30 commits September 3, 2025 11:05
* fix readme

* bump version
* Add docs for github commands

* swe_from_file_cmd  use PipeCode the same way as swe_from_repo_cmd
added some pipe codes to enum

* Renamed write_changelog_v2 to write_changelog_enhanced

* Rename check_docs_consistency to check_doc_inconsistencies
* fix/cursor_rules

* fix rules
* Split CLI code of all commands:

### Changed
- **Major CLI restructuring**: Reorganized flat command structure into logical command groups for better organization and maintainability
  - `repox` → `repox convert` (repository processing commands)
  - `swe-*` commands → `swe *` subcommands (e.g., `swe-from-repo` → `swe from-repo`)
  - `validate` → `validation validate` (with additional `validation dry-run` and `validation check-config` options)
- **Improved CLI architecture**: Extracted command implementations from main CLI module into co-located packages (`cocode/repox/repox_cli.py`, `cocode/swe/swe_cli.py`, etc.) for better code organization
- **Updated documentation**: All examples and references updated to reflect new command structure

### Added
- Command group structure with `app.add_typer()` for better CLI organization
- `cocode/common.py` module with shared utilities (`PipeCode` enum, `validate_repo_path()`, `get_output_dir()`)
- Alternative command names for flexibility (e.g., `repox repo` alongside `repox convert`)

### Deprecated
- Direct `cocode validate` command (still works but shows deprecation notice; use `cocode validation validate` instead)

**Migration**: Replace hyphens with spaces in SWE commands (e.g., `swe-from-repo` → `swe from-repo`) and use `repox convert` instead of `repox`. All old functionality remains available in the new structure.

* use github repos with temp clones

* Fix linting

* Cleanup imports

* Lint format
# Conflicts:
#	CHANGELOG.md
- Bump `pipelex` to `v0.10.2`: See `Pipelex` changelog [here](https://docs.pipelex.com/changelog/)
# Conflicts:
#	CHANGELOG.md
* fix/clean cli commands

* update changelog

* remove blackbox
* Duplicate changelog as analyze

* cli to Analyze
* refactor/For Pipelex 0.11.x

* WIP update Pipelex

* Update config and libraries

* Ignore patterns OK

* Rename ignore_patterns to  exclude_patterns

* Cleanup dependencies

* Move pipelines

* Adapt to Pipelex

* Pipelex deb dev

* Restore gemini via Pipelex inference
# Conflicts:
#	.pipelex/inference/backends/pipelex_inference.toml
#	CHANGELOG.md
#	cocode/pipelines/swe_diff/swe_diff.plx
#	pyproject.toml
#	uv.lock
* Adapt to pipelex new syntax for multiplicity

* Adapt more details

* Agent rules
# Conflicts:
#	cocode/pipelines/swe_diff/write_changelog_enhanced.plx
* Fix dupe biundles

* - Upgraded `pipelex` dependency from to `0.15.2`
# Conflicts:
#	pyproject.toml
#	uv.lock
* Before tests, check_is_initialized

* update pipelex and pytest

* cleanup imports
lchoquel and others added 7 commits June 5, 2026 01:10
* Use Pipelex Gateway (local dep)

* PLX fixes related to new checks

* Update for Pipelex

* Use feature/Chicago

* Pipelex dep

* Cleanup imports

* CI --disable-inference to run without Pipelex Service agreement
+ cleaned up agent rules

* Use Chicago b2

* Rename .plx to .mthds, reorganize inference deck, and remove redundant AI instruction files

Migrate pipeline files from .plx to .mthds extension, restructure the inference deck into separate files (llm, img_gen, extract, custom), update backend configs, and consolidate AI coding instructions into CLAUDE.md by removing .blackboxrules, .cursor/rules, .windsurfrules.md, AGENTS.md, and .github/copilot-instructions.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix NameError in changelog_struct by using builtin list type

Replace typing.List with builtin list[str] and remove unnecessary
from __future__ import annotations to fix annotation resolution
failure after pipelex update.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Update pipelex dependency to feature/Chicago branch

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Update stuff

* Consume pipelex public validation API in validation CLI and tests

Replace the hand-rolled load_all_pipeline_libraries / dry_run_all_pipes
helpers with pipelex's new public composers: load_libraries_and_activate
(the open/set/load ceremony) and BundleValidator.validate_current_library
(no-teardown sweep of the active library). Rewire the validation CLI
commands, the test conftest (both the inference and --disable-inference
branches), and the test_basic dry-run smoke test. Update the conftest
disable-inference branch to the current Pipelex.make(needs_inference=False)
API in place of the removed disable_inference kwarg.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Enhance model deck configurations and add runtime trace ignore patterns

* Pin pipelex to released 0.31.0 and bump pyright to 1.1.410

Switch the pipelex dependency from the local editable ../pipelex source to the published 0.31.0 release on PyPI and drop the [tool.uv.sources] override. Raise the pyright dev floor to 1.1.410 and regenerate uv.lock accordingly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Replace removed llm_for_large_codebase preset and tidy test bootstrap

Point doc_proofread and text_utils pipes at the engineering-codebase-analysis
preset (the old llm_for_large_codebase alias was removed with base_deck.toml
under pipelex 0.31). Also align test fixtures on PIPELINE_LIBRARY_DIRS_FOR_TESTS,
bump best-gemini to gemini-pro-latest, and drop the stale hello_world xfail.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Louis Choquel <8851983+lchoquel@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Reconcile dev with the v0.7.0 release (#73), which was dev's work
squash-released plus a cleanup pass. Resolved all conflicts by taking
main's side:

- CLAUDE.md: slim cocode-specific guide (drop vendored Pipelex rules block)
- cocode/common.py: package-anchored PIPELINE_LIBRARY_DIRS via Path(__file__)
- tests/conftest.py: Path-based test library dirs
- pyproject.toml: drop .cursor from ruff exclude
- .pipelex/telemetry.toml: deleted (matches main; unreferenced)

Cleaned up dev-only files main had removed/gitignored: untracked the
.pipelex config-sync backups, mthds_schema.json and pipelex_service.toml
(kept on disk), and removed the wip/ brief and the obsolete pipelex
migration doc.

Verified: make agent-check, make agent-test, pipelex validate --all all pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rotocol (#75)

* chore: track pipelex keyword-only refactor + migrate to PipelexMTHDSProtocol

Pin pipelex to the keyword-only-arguments refactor branch (git rev) and
migrate the SWE runner off the removed PipelexRunner class.

- pyproject/uv.lock: pipelex ==0.32.1 -> ==0.33.0 via git rev 529b9082
- swe_cmd.py + integration test: PipelexRunner -> PipelexMTHDSProtocol,
  execute_pipeline() -> execute() (response.pipe_output unchanged)

make agent-check and agent-test pass; uv lock --check is consistent.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore: bump pinned pipelex rev to 755b8211 (keyword-only arg reorderings)

Tracks the latest pipelex keyword-only refactor commit, which reorders several
function signatures to keyword-only. No call-site changes needed here — every
call site already passes the affected args by keyword. agent-check + agent-test green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore: re-pin pipelex to 0e32c8c0 (positional-subject consolidation)

Bumps the pinned pipelex git rev 755b8211 -> 0e32c8c0. That commit makes
all remaining non-subject params keyword-only (no reordering); all call
sites here already pass by keyword, so this is a no-op bump. agent-check +
agent-test green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Refactor configuration and update dependencies

- Removed experimental feature flags from pipelex.toml.
- Updated VSCode settings to enable format on save and organize imports.
- Cleaned up ai_instruction_update.mthds by removing combined_output.
- Adjusted changelog.mthds template formatting for consistency.
- Removed combined_output from swe_docs.mthds.
- Renamed TestingStrategyDoc to TestStrategyDoc in swe_docs.py and updated references.
- Updated pipelex.toml to remove pipeline tracking and reporting flags.
- Specified exact version for ruff in pyproject.toml and updated dependencies.
- Updated uv.lock to reflect changes in package versions and sources.

* use pipelex from pypi

---------

Co-authored-by: Louis Choquel <8851983+lchoquel@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
# Conflicts:
#	CHANGELOG.md
* Drop Python 3.10 support, add 3.14 to CI, bump pipelex to 0.39.0

Upstream pipelex removed its own 3.10 support and deleted the StrEnum
re-export we relied on, so we now import StrEnum from stdlib enum and
raise our own minimum to 3.11. Also test against 3.14 in CI and point
mypy at local paths instead of module names so an editable pipelex
checkout doesn't drag that repo's tests into our type check.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cg7xzRtbshzke25awsYEud

* chore: sweep onto pipelex 0.41.0 (#78)

Bumps pipelex[...]==0.39.0 -> ==0.41.0, crossing two release cycles.

The blast radius is small despite 0.41.0 being the largest breaking core
release of the year, and that is worth recording: cocode drives pipelex through
its public run surface rather than reaching into internals, so the parser move
out of core/, the Pipe-machinery move, the pipelex.providers vendor rename and
the Concept-becomes-pure-data change all miss this repo entirely.

Two addresses moved. pipelex.hub is deleted with no shim and split by owning
layer, so get_required_concept now comes from pipelex.interpreter_hub; and
PipeRunMode moved to pipelex.system.pipe_run_mode.

agent-check and agent-test green.


Claude-Session: https://claude.ai/code/session_015XjPhRAkJnL9YoSkR2GEoD

Co-authored-by: Louis Choquel <8851983+lchoquel@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* ci: bump actions/setup-python from v4 to v6 in lint and test workflows

v4 targets the Node 16 runtime, which the runners only still execute via
a forced fallback (they warn about it on every run). v6 is the first
major on Node 24. v5 would not have helped -- it targets the equally
deprecated Node 20.

This is not the fix for the review comment that prompted it: setup-python
resolves interpreters from the python-versions manifest at run time, so v4
provisions Python 3.14 fine, as the 3.14 matrix legs passing on acf0b31
("Successfully set up CPython (3.14.6)") already showed. The stale runtime
is a separate, real problem.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4dkSibzHHERhpPsPdGYqU

---------

Co-authored-by: Louis Choquel <8851983+lchoquel@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@greptile-apps

greptile-apps Bot commented Aug 1, 2026

Copy link
Copy Markdown

Confidence Score: 5/5

The PR appears safe to merge with no concrete changed-code defect identified.

The dependency migration updates the known moved APIs, removes conflicting duplicate registrations, and aligns package metadata and CI with the new supported Python range.

Reviews (1): Last reviewed commit: "Release v0.9.0" | Re-trigger Greptile

@lchoquel
lchoquel merged commit 562b6dd into main Aug 1, 2026
20 checks passed
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 1, 2026
@lchoquel
lchoquel deleted the release/v0.9.0 branch August 1, 2026 15:19
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants