Skip to content

feat(rust): port freeze create/update/delete to native Rust#1437

Open
jd wants to merge 1 commit into
devs/jd/worktree-rust-port/add-live-smoke-test-freeze-create-update-delete--9a7b270efrom
devs/jd/worktree-rust-port/port-freeze-create-update-delete-native-rust--653dbf47
Open

feat(rust): port freeze create/update/delete to native Rust#1437
jd wants to merge 1 commit into
devs/jd/worktree-rust-port/add-live-smoke-test-freeze-create-update-delete--9a7b270efrom
devs/jd/worktree-rust-port/port-freeze-create-update-delete-native-rust--653dbf47

Conversation

@jd
Copy link
Copy Markdown
Member

@jd jd commented May 19, 2026

Round-trip the three remaining freeze mutations:

  • freeze createPOST /v1/repos/<r>/scheduled_freeze with
    the Python CreateScheduledFreezePayload shape: start/end
    always present (null for open-ended emergency freezes),
    matching_conditions/exclude_conditions keys omitted when
    the user passed no -c/-e flags. When --timezone is left
    off, falls back to iana-time-zone::get_timezone() — same
    role as Python's tzlocal.get_localzone_name().
  • freeze updatePATCH /v1/repos/<r>/scheduled_freeze/<id>
    with skip-if-none on every field so PATCH semantics work
    correctly: a flag the user didn't pass doesn't touch the
    stored field.
  • freeze deletePOST /v1/repos/<r>/scheduled_freeze/<id>/delete
    with delete_reason in the body only when supplied (the API
    requires it for active freezes; the CLI lets the server
    reject a missing reason rather than pre-validating).

Adds Client::patch on the core HTTP client, a shared
mergify-freeze::common module (wire-format struct, naive-DT
parser, system-timezone detection, per-freeze human printer
used by create and update), and iana-time-zone as a new
dependency. The Python implementation of each command is left
in place but no longer reachable via the binary, since clap now
dispatches the whole freeze group natively.

Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com

Depends-On: #1436

@jd
Copy link
Copy Markdown
Member Author

jd commented May 19, 2026

This pull request is part of a Mergify stack:

# Pull Request Link
1 test(queue): add live smoke test for queue show #1408
2 feat(rust): port queue show to native Rust #1399
3 test(skill): port the skill-references test to Rust #1414
4 test(freeze): add live smoke test for freeze list #1434
5 feat(rust): port freeze list to native Rust #1435
6 test(freeze): add live smoke test for freeze create/update/delete #1436
7 feat(rust): port freeze create/update/delete to native Rust #1437 👈
8 refactor(rust): dedupe emit-helper boilerplate across command crates #1438
9 refactor(rust): share test scaffolding via mergify-test-support crate #1439
10 refactor(core): introduce CommandContext for the queue+freeze prelude #1441
11 refactor(ci): consolidate the CI-env scrubber into a shared testing module #1442
12 refactor: drop stale Phase X.Y doc markers and one inline color branch #1443
13 refactor(tui): share StyledGlyph across queue show/status renderers #1444
14 refactor(queue): drop indexmap, group_by_scope returns a Vec<(K, V)> #1445
15 refactor(ci): swap uuid for getrandom in the GHA heredoc delimiter #1446
16 refactor(config): standardize the workspace on serde_yaml_ng for YAML parsing #1447

@mergify
Copy link
Copy Markdown
Contributor

mergify Bot commented May 19, 2026

Merge Protections

Your pull request matches the following merge protections and will not be merged until they are valid.

🔴 ⛓️ Depends-On Requirements

Waiting for

This rule is failing.

Requirement based on the presence of Depends-On in the body of the pull request

🔴 👀 Review Requirements

Waiting for

  • #approved-reviews-by>=2
This rule is failing.
  • any of:
    • #approved-reviews-by>=2
    • author = dependabot[bot]
    • author = mergify-ci-bot
    • author = renovate[bot]

🔴 🔎 Reviews

Waiting for

  • #review-requested = 0
This rule is failing.
  • #review-requested = 0
  • #changes-requested-reviews-by = 0
  • #review-threads-unresolved = 0

🟢 🤖 Continuous Integration

Wonderful, this rule succeeded.
  • all of:
    • check-success=ci-gate

🟢 Enforce conventional commit

Wonderful, this rule succeeded.

Make sure that we follow https://www.conventionalcommits.org/en/v1.0.0/

  • title ~= ^(fix|feat|docs|style|refactor|perf|test|build|ci|chore|revert|ui)(?:\(.+\))?:

🟢 📕 PR description

Wonderful, this rule succeeded.
  • body ~= (?ms:.{48,})

@mergify mergify Bot requested a review from a team May 19, 2026 08:37
@jd jd marked this pull request as ready for review May 19, 2026 08:54
@jd jd force-pushed the devs/jd/worktree-rust-port/port-freeze-create-update-delete-native-rust--653dbf47 branch from be2b24a to f0eb260 Compare May 19, 2026 08:56
@jd jd temporarily deployed to func-tests-live May 19, 2026 08:56 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 19, 2026 08:56 — with GitHub Actions Inactive
@jd
Copy link
Copy Markdown
Member Author

jd commented May 19, 2026

Revision history

# Type Changes Reason Date
1 initial be2b24a 2026-05-19 08:56 UTC
2 rebase be2b24a → f0eb260 (rebase only) 2026-05-19 08:56 UTC
3 content f0eb260 → 56f3cf1 (raw) 2026-05-19 12:06 UTC
4 rebase 56f3cf1 → 50fcb0d (rebase only) 2026-05-19 13:04 UTC
5 rebase 50fcb0d → f322a06 (rebase only) 2026-05-19 14:15 UTC

@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 19, 2026 08:56 Failure
@jd jd force-pushed the devs/jd/worktree-rust-port/port-freeze-create-update-delete-native-rust--653dbf47 branch from f0eb260 to 56f3cf1 Compare May 19, 2026 12:06
@jd jd temporarily deployed to func-tests-live May 19, 2026 12:06 — with GitHub Actions Inactive
@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 19, 2026 12:07 Failure
@jd jd force-pushed the devs/jd/worktree-rust-port/add-live-smoke-test-freeze-create-update-delete--9a7b270e branch from 414a70b to 8106d1c Compare May 19, 2026 13:04
@jd jd force-pushed the devs/jd/worktree-rust-port/port-freeze-create-update-delete-native-rust--653dbf47 branch from 56f3cf1 to 50fcb0d Compare May 19, 2026 13:04
@jd jd temporarily deployed to func-tests-live May 19, 2026 13:04 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 19, 2026 13:04 — with GitHub Actions Inactive
@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 19, 2026 13:04 Failure
Round-trip the three remaining freeze mutations:

- `freeze create` — `POST /v1/repos/<r>/scheduled_freeze` with
  the Python `CreateScheduledFreezePayload` shape: `start`/`end`
  always present (null for open-ended emergency freezes),
  `matching_conditions`/`exclude_conditions` keys omitted when
  the user passed no `-c`/`-e` flags. When `--timezone` is left
  off, falls back to `iana-time-zone::get_timezone()` — same
  role as Python's `tzlocal.get_localzone_name()`.
- `freeze update` — `PATCH /v1/repos/<r>/scheduled_freeze/<id>`
  with skip-if-none on every field so PATCH semantics work
  correctly: a flag the user didn't pass doesn't touch the
  stored field.
- `freeze delete` — `POST /v1/repos/<r>/scheduled_freeze/<id>/delete`
  with `delete_reason` in the body only when supplied (the API
  requires it for active freezes; the CLI lets the server
  reject a missing reason rather than pre-validating).

Adds `Client::patch` on the core HTTP client, a shared
`mergify-freeze::common` module (wire-format struct, naive-DT
parser, system-timezone detection, per-freeze human printer
used by `create` and `update`), and `iana-time-zone` as a new
dependency. The Python implementation of each command is left
in place but no longer reachable via the binary, since clap now
dispatches the whole freeze group natively.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Change-Id: I653dbf47080f439f8c3500a7a526e46d707fc639
@jd jd force-pushed the devs/jd/worktree-rust-port/add-live-smoke-test-freeze-create-update-delete--9a7b270e branch from 8106d1c to fa07747 Compare May 19, 2026 14:14
@jd jd force-pushed the devs/jd/worktree-rust-port/port-freeze-create-update-delete-native-rust--653dbf47 branch from 50fcb0d to f322a06 Compare May 19, 2026 14:14
@jd jd temporarily deployed to func-tests-live May 19, 2026 14:15 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 19, 2026 14:15 — with GitHub Actions Inactive
@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 19, 2026 14:15 Failure
@jd jd temporarily deployed to func-tests-live May 19, 2026 14:18 — with GitHub Actions Inactive
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant