Skip to content

build(deps): Bump anthropics/claude-code-action from 1.0.69 to 1.0.77#7

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/anthropics/claude-code-action-1.0.77
Closed

build(deps): Bump anthropics/claude-code-action from 1.0.69 to 1.0.77#7
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/anthropics/claude-code-action-1.0.77

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot Bot commented on behalf of github Mar 25, 2026

Bumps anthropics/claude-code-action from 1.0.69 to 1.0.77.

Release notes

Sourced from anthropics/claude-code-action's releases.

v1.0.77

Subprocess environment scrubbing for untrusted-input workflows

Workflows that configure allowed_non_write_users now automatically get CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1, which makes Claude Code (v2.1.79+) strip Anthropic and cloud provider credentials from the environment of subprocesses it spawns (Bash tool, hooks, MCP stdio servers). The parent Claude process keeps these vars for its own API calls — only child subprocess environments are scrubbed.

Why: Workflows that process untrusted input (issue triage, PR review from non-write users) are exposed to prompt injection. A malicious issue body could trick Claude into running a Bash command that reads $ANTHROPIC_API_KEY via shell expansion and leaks it through an observable side channel. Scrubbing the subprocess environment removes the read primitive entirely.

What's scrubbed: Anthropic auth tokens, cloud provider credentials, GitHub Actions OIDC and runtime tokens, OTEL auth headers.

What's kept: GITHUB_TOKEN / GH_TOKEN — so wrapper scripts can still call the GitHub API.

Opt out: Set CLAUDE_CODE_SUBPROCESS_ENV_SCRUB: "0" at the job or step level if your workflow legitimately needs a subprocess to inherit these credentials.

No action required for most users — if you've configured allowed_non_write_users, scrubbing is now on automatically. If your workflow breaks because a subprocess expected inherited credentials, re-inject them explicitly (e.g., via MCP server env: config) or use the opt-out.

What's Changed

Full Changelog: anthropics/claude-code-action@v1.0.76...v1.0.77

v1.0.76

Full Changelog: anthropics/claude-code-action@v1...v1.0.76

v1.0.75

Full Changelog: anthropics/claude-code-action@v1...v1.0.75

v1.0.74

What's Changed

Full Changelog: anthropics/claude-code-action@v1...v1.0.74

v1.0.73

Full Changelog: anthropics/claude-code-action@v1...v1.0.73

v1.0.72

What's Changed

Full Changelog: anthropics/claude-code-action@v1...v1.0.72

v1.0.71

What's Changed

New Contributors

... (truncated)

Commits
  • ff9acae Auto-set subprocess env scrub when allowed_non_write_users is configured (#1093)
  • 6062f37 chore: bump Claude Code to 2.1.81 and Agent SDK to 0.2.81
  • df37d2f chore: bump Claude Code to 2.1.79 and Agent SDK to 0.2.79
  • 1ba15be Remove redundant git status/diff/log from tag mode allowlist (#1075)
  • 9ddce40 Restore .claude/ and .mcp.json from PR base branch before CLI runs (#1066)
  • 1b422b3 chore: bump Claude Code to 2.1.78 and Agent SDK to 0.2.77
  • 4c044bb chore: bump Claude Code to 2.1.77 and Agent SDK to 0.2.77
  • cd77b50 chore: bump Claude Code to 2.1.76 and Agent SDK to 0.2.76
  • 0e80d3c chore: bump Claude Code to 2.1.75 and Agent SDK to 0.2.75
  • f956510 Harden tag mode tool permissions against prompt injection (#1002)
  • 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 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 [anthropics/claude-code-action](https://github.com/anthropics/claude-code-action) from 1.0.69 to 1.0.77.
- [Release notes](https://github.com/anthropics/claude-code-action/releases)
- [Commits](anthropics/claude-code-action@1fc90f3...ff9acae)

---
updated-dependencies:
- dependency-name: anthropics/claude-code-action
  dependency-version: 1.0.77
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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 Mar 25, 2026
@dependabot @github
Copy link
Copy Markdown
Contributor Author

dependabot Bot commented on behalf of github Apr 1, 2026

Superseded by #9.

@dependabot dependabot Bot closed this Apr 1, 2026
@dependabot dependabot Bot deleted the dependabot/github_actions/anthropics/claude-code-action-1.0.77 branch April 1, 2026 04:50
justin-layerv added a commit that referenced this pull request Apr 11, 2026
Brings the Python SDK into parity with every improvement made to
qurl-typescript and qurl-mcp during the recent review and seam-audit
rounds. Cross-references the qurl-service OpenAPI spec
(qurl/api/openapi.yaml) and the Go handler code.

### Critical — real bug

* parse_error detail fallback. RFC 7807 leaves `detail` optional and
  the qurl Error schema only requires type/title/status/code.
  Previously the parser used `err.get("detail", "")`, producing
  "Forbidden (403): " when the API omitted detail. Now falls back
  `detail -> message -> title -> HTTP {status}`. QURLError also
  defaults detail to title in its constructor so Exception.args is
  never empty-string padded.

### RFC 7807 structured fields

* QURLError now carries `type` and `instance` (the problem-type URI
  and occurrence URI). Both are optional per the spec; the SDK was
  silently dropping them before.
* parse_error extracts both from the envelope.

### Backward compatibility

* Legacy `{error: {code, message}}` envelope supported in the
  fallback chain. If the API ever regresses to the pre-RFC-7807
  shape, the SDK degrades gracefully instead of showing empty detail.

### Type narrowing

* QURLStatus clarified as resource-only ("active" | "revoked" | str).
* New TokenStatus for AccessToken ("active" | "consumed" | "expired"
  | "revoked" | str) — per QurlSummary.status in the spec, tokens
  have a wider enum than resources.
* AccessToken.status now uses TokenStatus.
* New QuotaPlan ("free" | "growth" | "enterprise" | str); Quota.plan
  uses it. Uses the (Literal | str) pattern so the API can add new
  plans without a breaking SDK change.

### Spec-derived input validation

New validate_create_input / validate_update_input / validate_mint_input
helpers in _utils.py enforcing the constraints documented on each
request schema in openapi.yaml:

  - target_url: maxLength 2048
  - label: maxLength 500 (on create + mint_link)
  - description: maxLength 500 (on update)
  - custom_domain: maxLength 253 (on create)
  - max_sessions: 0-1000 integer (on create + mint_link)
  - tags: max 10, each 1-50 chars, regex ^[a-zA-Z0-9][a-zA-Z0-9 _-]*$

batch_create runs validate_create_input on every item and attributes
errors by index (`items[N]: ...`) so bulk mistakes fail fast.

### Mutual-exclusion pre-flight checks

* update: rejects both extend_by + expires_at
* update: rejects empty input (at least one field required)
* mint_link: rejects both expires_in + expires_at
  Extend() inherits the update() checks via delegation.

### delete() r_ prefix enforcement

Per the OpenAPI spec DELETE /v1/qurls/:id description: "Requires a
resource ID (r_ prefix). To revoke a single token, use DELETE
/v1/resources/:id/qurls/:qurl_id". New require_resource_id_prefix
helper raises ValueError client-side for q_ IDs with a clear message
pointing at the token-scoped endpoint.

### batch_create HTTP 400 passthrough

The API returns a populated BatchCreateOutput body on HTTP 400 (all
items rejected) — see qurl/internal/api/handlers/server.go:1126.
Added `allow_statuses` to _raw_request and _request, and batch_create
whitelists 400 so the per-item errors are surfaced instead of being
swallowed by the generic raise-on-error path. Non-400 errors (401,
403, 429, 5xx) still raise the appropriate QURLError subclass.
Matches the qurl-typescript and qurl-mcp implementations.

### create() parameter cleanup

Dropped the spurious `expires_at` kwarg from both sync and async
create(). CreateQurlRequest in openapi.yaml has only `expires_in` —
the previous signature let callers pass a field the API doesn't
accept.

### Dual-prefix documentation

get/update/extend/mint_link docstrings now document that both r_
(resource) and q_ (QURL display) IDs are accepted; the API resolves
q_ IDs to the parent resource automatically. delete() stays narrow
(r_ only) matching its client-side enforcement.

### parse_create_output: normalize empty qurl_id to None

Empty-string qurl_id from a response (mock or legacy shape) is now
normalized to None so callers can use `if result.qurl_id:` as a
presence check instead of having "" be silently truthy-false.

### _serialize_value: stop stripping None from nested dicts

Previously the dict branch filtered out None values, which would
silently drop explicit nulls callers send to clear nested fields
(e.g. `{"access_policy": {"ai_agent_policy": null}}`). Top-level
None-stripping still happens in build_body since that serves the
"drop unset kwargs" case. Nested None is now preserved; dataclass
fields still skip None (dataclasses distinguish unset vs explicit).

### Misc

* build_list_params type annotation tightened — the `int | None`
  arm was misordered in the old union.
* test_update_with_tags corrected to use spec-compliant tags
  (previous test used `team:engineering` with a colon that the
  ^[a-zA-Z0-9][a-zA-Z0-9 _-]*$ regex rejects).
* test_batch_create_empty_raises regex updated for the new error
  message ("requires at least 1 item").
* test_create_sends_correct_body now covers one_time_use,
  max_sessions, and session_duration alongside label (reviewer #9
  gap note).

### Tests (74 -> 101)

Twenty-seven new tests covering:
  - Create rejection: target_url > 2048, label > 500,
    custom_domain > 253, max_sessions > 1000, max_sessions < 0
  - Create boundaries: max_sessions 0 and 1000 both accepted
  - Update rejection: description > 500, > 10 tags, tag > 50 chars,
    tag regex pattern mismatch, empty input, mutual-exclusion
  - Update success: empty tags array clears all tags
  - mint_link rejection: label > 500, max_sessions > 1000,
    mutual-exclusion
  - delete q_ prefix rejection
  - batch_create per-item validation with index attribution
  - batch_create missing target_url surfaces index
  - Async batch_create empty/>100 (reviewer #7 symmetry gap)
  - batch_create HTTP 400 passthrough with per-item errors
  - batch_create still raises on 401 (passthrough is surgical)
  - Error type/instance surfacing
  - Error detail fallback when RFC 7807 detail missing
  - Legacy error.message fallback
  - parse_create_output empty qurl_id normalization

BREAKING CHANGE: `active_qurls_percent` on `Quota.usage` is now
`float | None` instead of `float` with a `0.0` default; callers
doing arithmetic must None-check. Also `create()` no longer accepts
an `expires_at` kwarg — that field wasn't in `CreateQurlRequest`.

Co-Authored-By: Claude Opus 4.6 (1M context) <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.

0 participants