Skip to content

Release/v0.10.0 - #57

Merged
lchoquel merged 10 commits into
mainfrom
release/v0.10.0
Jul 1, 2026
Merged

lchoquel merged 10 commits into
mainfrom
release/v0.10.0

Conversation

@lchoquel

@lchoquel lchoquel commented Jul 1, 2026

Copy link
Copy Markdown
Member

Review in cubic

lchoquel and others added 9 commits June 9, 2026 16:45
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Three robustness fixes to the /bootstrap skill's rename engine so adversarial
or common-but-edge inputs no longer produce a broken generated project:

- TOML-escape interpolated pyproject fields (description, author name/email,
  license, Repository URL) via a new toml_str() helper. A value containing a
  double-quote or backslash (e.g. `Use "AI" agents`) previously wrote invalid
  TOML, failing `uv lock`/checks on the generated project.
- Normalize clone URLs: strip a trailing `.git` before re-appending it and
  before deriving the directory name, so a `.git` repo URL no longer yields
  `git clone …/repo.git.git` and `cd repo.git` in the README.
- Validate the distribution name (PEP 503/508) when `--dist` is overridden,
  matching the existing validate_package() guard, so a value like
  `bad dist name` is rejected up front instead of writing an invalid
  [project].name.

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

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

- pyproject/uv.lock: pin pipelex to git rev 529b9082 (keyword-only branch)
- hello_world.py: PipelexRunner -> PipelexMTHDSProtocol, execute_pipeline() -> execute()

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

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

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>
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>
Bring the /bootstrap skill (and its bootstrap.py PR-review fix) forward
into the 0.10.0 line. Consolidate the changelog: the v0.9.1 entry is
folded into a single [0.10.0] section (no separate v0.9.1 heading), and
the version is bumped to 0.10.0 (pyproject + uv.lock).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ry9KASVKXj1SVgJqtrSMxh
- bootstrap --clean: anchor the README strip on the "### Use this template"
  heading + the "*Replace…*" line instead of the first "---" (which now
  matched only the footer rule and collapsed the whole README)
- bootstrap: fail fast when a non-MIT license is chosen without
  --license-holder, instead of writing a "<COPYRIGHT HOLDER>" placeholder
- CHANGELOG: restore "## [v0.10.0] - 2026-07-01" so changelog-check.yml and
  github-release.yml match; drop the inaccurate [tool.pytest] bullet
- remove the `make run` target and repoint the docs to
  `python -m my_project.hello_world` (no package name left in the Makefile)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ry9KASVKXj1SVgJqtrSMxh
@greptile-apps

greptile-apps Bot commented Jul 1, 2026

Copy link
Copy Markdown

Greptile Summary

This PR updates the starter for the hosted Pipelex API. The main changes are:

  • Switches runtime dependencies from pipelex to pipelex-sdk and python-dotenv.
  • Rewrites the hello-world CLI to send the .mthds bundle through PipelexAPIClient.
  • Updates tests, markers, CI commands, and docs for offline checks versus API/inference checks.
  • Adds a bootstrap skill and script for renaming the template into a real project.

Confidence Score: 3/5

The update is mostly straightforward, but generated Pipelex runtime artifacts can now be accidentally tracked and the sample API output handling can silently report success without usable text.

The changed dependency and test setup is coherent, but the ignore-rule regression affects common local workflows and the CLI path lacks validation for unexpected API response content.

.gitignore and my_project/hello_world.py

T-Rex T-Rex Logs

What T-Rex did

  • Created representative dummy Pipelex files under .pipelex/storage and .pipelex/traces, verified they are not ignored by Git, and confirmed they can be staged with a targeted git add.
  • Migrated from the old local runner path to the new Pipelex API client path; the initial HTTP 200 OK run showed EXTRACT_HELPER_MISSING, and the subsequent run used start_and_wait with pipe_code='hello_world', mthds_contents_count=1, mthds_contents_sha256 equal to BUNDLE_SHA256, and EXTRACT_MAIN and EXTRACT_FALLBACK data.
  • Compared bootstrap before and after states; the after state shows dry-run hash unchanged, real bootstrap transformations, and a failure at the missing README clone URL assertion, with the validation script capturing the before/after expectations.
  • Reviewed workflow tests and environment setup; the before/after workflow captures indicate validate expansion and exclusions, but pytest collection was attempted and failed early due to ModuleNotFoundError: No module named 'dotenv' before any tests ran.

View all artifacts

T-Rex Ran code and verified through T-Rex

Comments Outside Diff (1)

  1. General comment

    P1 README clone instructions are not updated when --clean is used

    • Bug
      • Running the requested bootstrap command with --repo-url https://github.com/acme/invoice-extractor and --clean does not leave README clone instructions pointing at the provided repository. The validation reached grep -q 'git clone https://github.com/acme/invoice-extractor' README.md and exited 1; follow-up grep showed README contains project/package substitutions and the Pipelex API GitHub URL, but no project clone command for the provided repo.
    • Cause
      • In .claude/skills/bootstrap/scripts/bootstrap.py, transform_readme() calls strip_template_block(text) before applying clone replacements. strip_template_block() deletes the ### Use this template subsection up to the next H2, which appears to include the placeholder clone instructions, so lines 262-269 no longer have git clone https://github.com/yourusername/your-repo-name.git / cd your-repo-name text to replace.
    • Fix
      • Apply repository clone replacements before stripping template scaffolding, or adjust strip_template_block() to preserve/move the clone instructions into a real-project setup section when --repo-url is provided. Then add an automated test covering --clean --repo-url together.

    T-Rex Ran code and verified through T-Rex

Prompt To Fix All With AI
Fix the following 2 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 2
.gitignore:30
**Pipelex Traces Become Trackable**

Self-hosted/local Pipelex runs can still create `.pipelex/storage` and `.pipelex/traces`, but this change stops ignoring those generated artifacts. A normal `git add -A` can now stage runtime traces, payloads, and local state from supported workflows, which can leak sensitive run data into commits.

### Issue 2 of 2
my_project/hello_world.py:66-67
**Missing Text Prints Success**

When the API returns a valid content dictionary without a `text` key, `hello_world()` prints `None` and exits successfully. The e2e test only checks that the coroutine does not raise, so a schema mismatch or unexpected API output can look like a successful run while showing no generated haiku.

```suggestion
    generated_text = content.get("text")
    if not isinstance(generated_text, str) or not generated_text:
        raise RuntimeError("The pipeline returned no text output.")

    print("Your first Pipelex output:\n")
    print(generated_text)
```

Reviews (1): Last reviewed commit: "chore: update build-system configuration..." | Re-trigger Greptile

Comment thread .gitignore
Comment thread my_project/hello_world.py Outdated
find_main_content() can return a content dict that has no `text` key
(schema mismatch or unexpected API output). Previously hello_world()
did `print(content.get("text"))`, which printed `None` and exited
successfully — a silent failure that the API-hitting e2e test could not
catch. Guard the value: raise RuntimeError unless `text` is a non-empty
string, mirroring the existing `content is None` check.

Add tests/unit/test_hello_world.py — an offline regression test (no
pipelex_api/inference marker, runs in CI) that patches the API client
with a hand-rolled async fake and asserts the missing-text path raises.

Resolves greptile review comment on PR #57.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ry9KASVKXj1SVgJqtrSMxh
@lchoquel
lchoquel merged commit 8a2ea07 into main Jul 1, 2026
16 checks passed
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 1, 2026
@lchoquel
lchoquel deleted the release/v0.10.0 branch July 1, 2026 15:11
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.

1 participant