Skip to content

ci: bump astral-sh/setup-uv from 4 to 7 - #12

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/astral-sh/setup-uv-7
Closed

ci: bump astral-sh/setup-uv from 4 to 7#12
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/astral-sh/setup-uv-7

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Feb 2, 2026

Copy link
Copy Markdown

Bumps astral-sh/setup-uv from 4 to 7.

Release notes

Sourced from astral-sh/setup-uv's releases.

v7.2.1 🌈 update known checksums up to 0.9.28

Changes

🧰 Maintenance

📚 Documentation

⬆️ Dependency updates

v7.0.0 🌈 node24 and a lot of bugfixes

Changes

This release comes with a load of bug fixes and a speed up. Because of switching from node20 to node24 it is also a breaking change. If you are running on GitHub hosted runners this will just work, if you are using self-hosted runners make sure, that your runners are up to date. If you followed the normal installation instructions your self-hosted runner will keep itself updated.

This release also removes the deprecated input server-url which was used to download uv releases from a different server. The manifest-file input supersedes that functionality by adding a flexible way to define available versions and where they should be downloaded from.

Fixes

  • The action now respects when the environment variable UV_CACHE_DIR is already set and does not overwrite it. It now also finds cache-dir settings in config files if you set them.
  • Some users encountered problems that cache pruning took forever because they had some uv processes running in the background. Starting with uv version 0.8.24 this action uses uv cache prune --ci --force to ignore the running processes
  • If you just want to install uv but not have it available in path, this action now respects UV_NO_MODIFY_PATH
  • Some other actions also set the env var UV_CACHE_DIR. This action can now deal with that but as this could lead to unwanted behavior in some edgecases a warning is now displayed.

Improvements

If you are using minimum version specifiers for the version of uv to install for example

[tool.uv]
required-version = ">=0.8.17"

This action now detects that and directly uses the latest version. Previously it would download all available releases from the uv repo to determine the highest matching candidate for the version specifier, which took much more time.

If you are using other specifiers like 0.8.x this action still needs to download all available releases because the specifier defines an upper bound (not 0.9.0 or later) and "latest" would possibly not satisfy that.

🚨 Breaking changes

... (truncated)

Commits
  • 803947b chore: update known checksums for 0.9.28 (#744)
  • 24553ac chore: update known checksums for 0.9.27 (#742)
  • 085087a Bump zizmorcore/zizmor-action from 0.3.0 to 0.4.1 (#741)
  • 9cfd029 chore: update known checksums for 0.9.26 (#734)
  • dd9d55b chore: update known checksums for 0.9.25 (#733)
  • 8512ad0 Clarify impact of using actions/setup-python (#732)
  • cc55817 chore: update known checksums for 0.9.24 (#730)
  • 61cb8a9 add outputs python-version and python-cache-hit (#728)
  • 11050ed fix: use uv_build backend for old-python-constraint-project (#729)
  • 1d22faf Bump peter-evans/create-pull-request from 7.0.9 to 8.0.0 (#719)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 4 to 7.
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](astral-sh/setup-uv@v4...v7)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code labels Feb 2, 2026
@jwbron jwbron closed this Feb 5, 2026
@dependabot @github

dependabot Bot commented on behalf of github Feb 5, 2026

Copy link
Copy Markdown
Author

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version. You can also ignore all major, minor, or patch releases for a dependency by adding an ignore condition with the desired update_types to your config file.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot
dependabot Bot deleted the dependabot/github_actions/astral-sh/setup-uv-7 branch February 5, 2026 02:07
james-in-a-box Bot added a commit that referenced this pull request Feb 11, 2026
- Include truncated raw_partial_input in tool_use blocks when JSON parsing
  fails, for debugging incomplete streaming responses (re-review issue #1)
- Add docstring notes documenting:
  - Tool result matching order-dependency (original issue #5)
  - Force push checkpoint behavior (original issue #7)
  - Shared transcript for multi-commit pushes (original issue #8)
  - container_id fallback from filename (original issue #12)
- Fix import sorting in gateway.py (ruff auto-fix)

Authored-by: egg
jwbron pushed a commit that referenced this pull request Feb 11, 2026
…pt capture (#517)

* Initialize SDLC contract for issue #509

* Draft analysis for issue #509: checkpoint migration

* Update refine review state (cycle 1)

* Approve and advance to plan phase for issue #509

* Draft plan for issue #509: per-commit checkpoints and API proxy capture

* Update plan review state (cycle 1)

* Approve and advance to implement phase for issue #509

* Populate contract tasks from plan for issue #509

* Implement per-commit checkpoint granularity (Phase 1)

Add support for creating one checkpoint per commit instead of one per push:

- Add get_commits_in_push() helper to enumerate commits between old/new SHAs
- Add capture_and_store_checkpoints_for_push() for multi-commit checkpoint creation
- Modify gateway push handler to get remote ref before push and iterate commits
- Each checkpoint now has push_sha pointing to the tip commit for traceability
- Graceful fallback: if rev-list fails, creates single checkpoint for tip commit

This is Phase 1 of issue #509 (per-commit checkpoints + API proxy capture).
Transcript source is still Claude Code JSONL (to be migrated in Phase 3).

Authored-by: egg

* Implement API proxy transcript capture (Phase 2)

Add instrumentation to the Anthropic API proxy to capture request/response
pairs for checkpoint creation:

- New TranscriptBuffer class manages per-session buffer files in /tmp/egg-transcripts/
- Fixed 10MB buffer rotation drops oldest entries when size limit exceeded
- Non-streaming responses captured with full content and usage
- Streaming SSE responses reassembled to extract content blocks
- Buffer entry schema documented with timestamps, model, messages, tools, usage
- Thread-safe file writes with file locking
- Global buffer cache for efficient access by container ID

This is Phase 2 of issue #509 (per-commit checkpoints + API proxy capture).
Phase 3 will migrate checkpoint extraction to use this buffer instead of
Claude Code JSONL files.

Authored-by: egg

* Migrate transcript source to API proxy buffer (Phase 3)

Replace Claude Code JSONL extraction with API proxy buffer reading:

- Add extract_transcript_from_proxy_buffer() and related extraction functions
- Update CheckpointHandler.capture_checkpoint() to use proxy buffer instead of JSONL
- Remove CLAUDE_PROJECTS_DIR constant (no longer needed)
- Maintain same return types for backward compatibility

The proxy buffer provides a stable API-based source for transcripts,
eliminating dependency on Claude Code's internal file format which
can change without notice.

This is Phase 3 of issue #509. Phase 4 will clean up deprecated JSONL code
and add buffer cleanup on session end.

Authored-by: egg

* Cleanup and documentation for proxy buffer architecture (Phase 4)

- Remove all Claude Code JSONL-specific code from transcript_extractor.py
  (file now only contains proxy buffer extraction functions)
- Add buffer cleanup on session end in session_manager.py
- Update CLI help text to describe per-commit checkpoint behavior
- Add architecture documentation in checkpoint_handler.py explaining
  the transcript flow from API proxy to checkpoint storage

Authored-by: egg

* Update autofix attempts for issue #509

* Address review feedback on PR #517 transcript capture

Fixes critical and correctness issues raised in review:

1. Race condition in buffer rotation (Critical #1):
   - Use exclusive file lock during entire rotation operation
   - Write to temp file then atomically replace with os.replace()
   - Clean up temp file on error

2. Memory accumulation for streaming (Critical #2):
   - Cap collected chunks at 10MB to prevent resource exhaustion
   - Log when capture is truncated due to size limit

3. Missing error handling for failed API responses (Critical #3):
   - Capture 4xx/5xx responses with status code and error message
   - Pass status_code to capture function for proper handling

4. Missing input_tokens from message_start (Correctness #4):
   - Extract input_tokens, cache_read_input_tokens from message_start
   - message_delta only contains output_tokens per SSE spec

5. Error events not handled in SSE parsing (Correctness #4):
   - Handle 'error' event type and capture as error content block
   - Add input_parse_error flag when tool_use JSON fails to parse

6. Unsafe path construction (Correctness #6):
   - Validate container_id against path traversal characters
   - Verify resolved path is within buffer directory

Minor fixes:
- Move `import time` to module level (Minor #10)
- Set buffer directory permissions to 0o700 (Minor #11)

Authored-by: egg

* Address re-review feedback: add raw_partial_input and doc comments

- Include truncated raw_partial_input in tool_use blocks when JSON parsing
  fails, for debugging incomplete streaming responses (re-review issue #1)
- Add docstring notes documenting:
  - Tool result matching order-dependency (original issue #5)
  - Force push checkpoint behavior (original issue #7)
  - Shared transcript for multi-commit pushes (original issue #8)
  - container_id fallback from filename (original issue #12)
- Fix import sorting in gateway.py (ruff auto-fix)

Authored-by: egg

* Address minor review observations: add constant and logging

- Add RAW_INPUT_TRUNCATE_SIZE constant for the 1000 char truncation
  threshold used when preserving raw tool input on parse failure
- Add warning log in transcript_extractor when extracting tool calls
  with input_parse_error flag, surfacing streaming parse failures
  during checkpoint extraction

Authored-by: egg

* Add test coverage for input_parse_error handling path

Adds tests for the input_parse_error and raw_partial_input handling
that was added for incomplete streaming JSON responses. This addresses
the non-blocking observation from the PR review to ensure the
defensive code path is documented through tests and protected from
regressions.

- TestParseSSEResponse: Tests that incomplete tool_use JSON sets
  input_parse_error flag and preserves truncated raw_partial_input
- TestExtractToolCallsFromProxyBuffer: Tests that extraction logs
  a warning when input_parse_error is present and truncates the
  raw input preview appropriately

Authored-by: egg

---------

Co-authored-by: james-in-a-box[bot] <2365503+james-in-a-box[bot]@users.noreply.github.com>
Co-authored-by: james-in-a-box[bot] <246424927+james-in-a-box[bot]@users.noreply.github.com>
james-in-a-box Bot pushed a commit that referenced this pull request May 11, 2026
…lockers

Reviewer_plan NACKed the v1 plan with one blocking item (single-OR
JQL fails on team-managed Jira projects) plus 20 non-blocking flags
ranked by impact. This revision lands the blocker plus the 10
highest-impact non-blockers in one re-propose.

Blocker:
- TASK-1-3 + TASK-1-12: replace the single-OR JQL
  `parent = <K> OR "Epic Link" = <K>` with two separate queries
  (`parent = "<K>"` and `"Epic Link" = "<K>"`) and merge results,
  tolerating per-query HTTP 400 (architect ad-9 / risk_analyst R4).
  Single-OR fails on team-managed projects that lack the
  "Epic Link" custom field; auto-detection silently downgrades to
  fresh-path and the sweep returns empty. Exports the helper
  `search_epic_children` so TASK-1-12 reuses it.

Top non-blocking (reviewer-flagged as most impactful):
- #1 In-flight gate trust-boundary trade-off: add explicit
  acknowledgement that gateway-side enforcement is deferred and
  v1 relies on agent-side gating + apply-time re-check by
  TASK-1-13.
- #5 APPLY_EPIC role registration: expand TASK-1-10 to enumerate
  all FIVE registration steps (AgentRole, AgentRoleDefinition,
  get_roles_for_phase, file-restrictions patterns, spawner
  branch).
- #6 epic_apply persistence MCP surface: add
  `mcp__sdlc__update_epic_apply` MCP tool to TASK-1-7 so the
  sandbox-side agent can persist artifact updates.
- #7 Concurrent-edit guard: TASK-1-10 now fetches the current
  epic Description, sha256s it, and registers a divergence HITL
  on mismatch; TASK-1-9 records the baseline sha256;
  TASK-1-7 adds `refine_description_sha256` to the schema.

Additional non-blockers folded in:
- #2: jira_effective_mode added to primitives table.
- #3: TASK-1-5 introduces `shared/egg_jira_credentials.py` shared
  module to eliminate the orchestrator → gateway coupling.
- #8: TASK-1-11 commits to extending `parse_plan` (not
  pass-through).
- #9: TASK-1-5/TASK-1-14 add already-in-state idempotent
  short-circuit for Won't-Do transitions.
- #10: TASK-1-15 introduces `Pipeline.jira_parent_epic_key` so PR
  phase doesn't need an extra Jira call.
- #11: TASK-1-16 adds `PipelinePhase.PLAN_STOPPED` documented
  terminal phase + updates overseer monitor short-circuit.
- #14: TASK-1-11 requires `wont_do_reason` per node + ⚠ warning
  rendering in the plan draft (R6).
- #15: TASK-1-5 gates the orchestrator-direct cred surface behind
  `EGG_ENABLE_ORCH_JIRA_TRANSITIONS` (default off — R1).
- #16: TASK-1-7 schema gains `version`, `idempotency_seed`,
  per-edit `summary_hash` + `applied_at`, `wont_do_reason`,
  signal_source as a list (R10).
- #19: TASK-1-19 drops orchestrator-cli.md, adds
  submit-task-mcp.md.
- #13: TASK-1-18 adds the lint regression test
  `test_no_outbound_jira_writes.py` (R7).
- #12: TASK-1-12 introduces a reverse-index
  `.egg-state/jira-child-pipeline-index.json` to bound the sweep
  to O(K) (R3 performance mitigation).
- #20: New "Risk-analyst items addressed" section summarises how
  R1/R2/R6/R7/R10/R12 are resolved in-plan (no fresh HITLs).

Plan still parses cleanly: 1 slice, 19 tasks, 0 warnings, 0
role-alignment errors.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
james-in-a-box Bot pushed a commit that referenced this pull request May 12, 2026
…K v3

Addresses the BLOCKING holistic findings (Pass 1+2+3+4):

* **#1 — `submit_task --mode` is now consumed end-to-end.** The
  `create_pipeline()` route in `orchestrator/routes/pipelines.py` reads
  `data["jira_ticket"]` and `data["jira_epic_mode"]` (the latter set
  by `submit_task`), runs the detection probe, and persists
  `jira_epic_key` / `jira_effective_mode` / `jira_parent_epic_key` on
  the Pipeline via the StateStore. `mcp_tools.py` now forwards
  `jira_ticket` explicitly so the route doesn't have to parse it back
  out of `pipeline_id`.
* **#2 — `Pipeline.jira_epic_key` / `jira_effective_mode` /
  `jira_parent_epic_key` are now written.**
  `StateStore.create_pipeline()` accepts and forwards all three.
* **#3 + #4 — `apply_epic` is now opted into the refine and plan
  phase rosters when `pipeline.jira_epic_key` is set.**
  `get_roles_for_phase()` grows an `is_epic_pipeline` parameter
  gated on the field's presence; the orchestrator's role-resolution
  site at `routes/pipelines.py` passes the flag. Sandbox env now
  exports `EGG_JIRA_EPIC_KEY`, `EGG_JIRA_EFFECTIVE_MODE`,
  `EGG_JIRA_PARENT_EPIC_KEY`, and the resolved `EGG_JIRA_HIERARCHY_FIELD`
  (looked up via `resolve_hierarchy_field`; a missing mapping leaves
  the env empty and the apply step surfaces a HITL gate).
* **#5 — `PipelinePhase.PLAN_STOPPED` enum value added** to
  `shared/egg_contracts/models.py`. Terminal-without-PR signal for
  the Stop-after-plan plan-gate fork.
* **#11 — `detect_jira_issuetype` exception handling narrowed.**
  Catches `ConnectionError` / `TimeoutError` / `OSError` and
  HTTP-failure exceptions (those carrying `status_code`) but lets
  programming errors propagate.
* **#12 — `_run_jql` 400 tolerance is now `tolerate_400` keyword.**
  Only the `"Epic Link"` query opts in; `parent =` 400s surface
  to the caller so malformed-JQL / permission errors aren't
  silently treated as empty children.
* **#13 — `search_epic_children` `require_hierarchy_mapping=True`**
  re-raises `JiraHierarchyUnmappedError` so callers (the apply step,
  per decision-2) can surface a HITL gate rather than silently
  running both queries.

For **#6** (the planned `mcp__sdlc__update_epic_apply` and
`mcp__sdlc__register_in_flight_gate` MCP tools) the agent prompts
in `orchestrator/agent_prompts/apply_epic.py` are reframed to use
the existing `mcp__sdlc__register_open_question` for HITL gates and
a file-based handoff (`.egg-state/agent-outputs/<prefix>-epic-apply.json`)
for the artifact write. The dedicated MCP tool registration is a
planned follow-up; the file-based path lands first because it's
serviceable end-to-end without new sandbox-side tools.

The plan-gate Stop/Continue fork itself (TASK-1-16 dispatch) and
the orchestrator-side post-apply hook that reads the artifact JSON
and merges into `Pipeline.set_epic_apply()` are still deferred to a
follow-up — but the foundation primitives, state-store, env-exports,
and role-roster wiring are now in place so those follow-ups don't
need to re-touch this surface.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
james-in-a-box Bot pushed a commit that referenced this pull request May 12, 2026
…y + N1

reviewer_code v3 blocking findings, all addressed:

* **#1 JQL injection** — new ``_validate_jira_key`` (regex
  ``[A-Z][A-Z0-9_]*-\d+``) runs on every epic_key BEFORE
  interpolation into JQL. Defends against a value like
  ``ENG-1" OR project=BAR`` terminating the quoted operand and
  injecting arbitrary clauses.
* **#2 No JQL pagination** — ``_run_jql`` now loops on
  ``nextPageToken`` until ``isLast=true`` or the cursor is omitted.
  Hard cap of 200 pages × 100 results = 20k children before emitting
  a structured warning and breaking.
* **#3 Status-only idempotency check** — ``_get_current_state``
  fetches ``status,resolution`` and ``transition_to_wont_do`` now
  short-circuits when ``statusCategory.key == "done"`` AND
  ``resolution.name`` is a Won't-Do name. Matches the common
  Atlassian workflow shape.
* **#4 Raw comment body** — comments are wrapped in ADF via the new
  ``_wrap_text_as_adf`` helper. Atlassian REST API v3 rejects plain
  strings for issue-comment bodies.
* **#5 ``get_epic_apply`` swallowing errors** — malformed JSON /
  failed Pydantic validation now log a structured
  ``epic_apply_artifact_invalid`` warning. Apply step's "no prior
  artifact" path still sees ``None``, but operators see the corruption.
* **#6 Mutual-exclusivity validator** — Pipeline ``@model_validator``
  refuses to construct a pipeline with both ``jira_ticket`` and
  ``jira_epic_key`` set.
* **#7 Lossy description hash** — new ``compute_description_sha256``
  hashes canonical ADF (`json.dumps(sort_keys=True,
  separators=(",", ":"))`) for dicts and UTF-8 for strings. The
  refine input gatherer now uses this helper.
* **#9 Audit log holes** — every transition exit path emits an
  ``orch_jira_transition_attempt`` line with ``outcome=`` matching
  the path: ``credentials_unavailable``, ``feature_flag_disabled``,
  ``status_fetch_failed``, ``already_in_state``,
  ``transition_not_found``, ``post_failed``, ``applied``.
* **#10 Feature-flag enforcement** — ``_post_transition`` checks the
  flag too (defence-in-depth). Future callers that go directly to
  the private method can't bypass the opt-in.
* **#11 ``httpx.Client`` never closed** — new ``close()`` method
  plus ``__enter__``/``__exit__`` so the orchestrator's shutdown
  hook can release pooled connections.
* **#12 ``__repr__`` token leak** — ``JiraCredentials.api_token``
  is now declared with ``field(repr=False)``; ``repr(creds)``
  emits ``JiraCredentials(base_url='...', username='...')`` only.

reviewer_code v4 BLOCKER N1 — agent-outputs file consumer:

* New module ``orchestrator/epic_apply_merge.py`` exporting
  ``merge_epic_apply_from_agent_outputs(pipeline, ...)``. Reads
  ``.egg-state/agent-outputs/<prefix>-epic-apply.json``, validates
  against the ``EpicApplyArtifact`` schema, and merges into
  ``pipeline.set_epic_apply()``. Re-runs union by
  ``(kind, target, summary_hash)`` for ``applied_edits`` and by
  ``child_key`` for ``wont_do_batch`` / ``in_flight_gates`` so
  partial-batch state survives re-spawns.
* Wired into the phase-success path in
  ``orchestrator/routes/pipelines.py`` so refine and plan
  completions automatically merge the agent's artifact.

``make lint`` passes end-to-end.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant