Skip to content

base red: panic ratchet: remove the merge wave's cmux-tui-core and automation index/slice hits; reasons on chats-mirror's allows - #28808

Merged
lawrencecchen merged 5 commits into
feat-cmux-nextfrom
base-red/panic-ratchet
Oct 31, 2026
Merged

lawrencecchen merged 5 commits into
feat-cmux-nextfrom
base-red/panic-ratchet

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

What

A base red, priority zero. cmux-tui spec / clippy (changed cmux-tui packages), step "Rust panic ratchet on changed cmux-tui packages", is red on every feat-cmux-next push since 591cc78 (00:34Z). The last green push was dfaa79e / 2b79f24 only because those pushes did not check cmux-tui-core:

cmux-tui-core: clippy::indexing_slicing 856 > baseline 853
cmux-tui-core: clippy::string_slice 57 > baseline 52
cmux-tui/crates/cmux-chats-mirror/src/{feed,index,chat}.rs: allow(cast_possible_truncation) needs reason = "..."

Each PR in the 00:0x-00:35Z merge wave passed alone; together they went over the baseline. I compared the CI clippy JSON artifacts of the push runs 41150144171 (853/52), 41150892225 (855/52) and 41151676131 (856/57) to find the new hits:

Hits Culprit Fix
1 indexing, launch_snapshot.rs projection[key] #28071 (ac1c524) projection.get(key).and_then(Value::as_str)
1 indexing, personal_store.rs bytes[0] #28056 (8f3e9c2) bytes.first().is_some_and(u8::is_ascii_lowercase)
1 indexing + 5 string_slice, terminal_adoption.rs digest[..16], &hex[a..b] #27895 (15f07aa) a pure derive_template_workspace_key: a zip copy and a writer that puts a dash before bytes 4, 6, 8 and 10
4 allows without a reason, cmux-chats-mirror aaa3118 the tip deleted the crate (f7e5bb6), so the merge ddd1753 takes the deletion; the cherry-pick of #28739 is no longer in the diff

| cmux-automations, a new crate (must be 0): 9 indexing + 3 string_slice; cmux-tui 832 > 831 (cli/automation.rs &args[i]) | the cmux automation series ee37179, d2c6a0d, c917912 (direct pushes, 01:52Z-02:24Z, after this branch's first base) | 9e0d6b0: ALPHABET.get, a 5-field slice pattern in cron, id_head(id, prefix), split at NUL for the hostname, strip_prefix in is_automation_id, an iterator in Args::parse |

These hits are in the same job, so their fix is in this PR too (each fix stays red on the other's red).

The baseline is not raised. Behavior does not change:

  • the_template_workspace_key_is_the_same_uuidv8_as_the_first_derivation pins the key for one input. I computed the expected value with the original algorithm (Python hashlib), so a restart still finds a claim that was cut short.
  • a_session_capability_list_holds_only_unique_capability_tokens adds a token that starts with a digit (1profiles). That is the case that bytes[0] checked.
  • The projection[key] change returns the same values (get gives None where indexing gave Null, and both become "").
  • Automation: run_ids_are_deterministic_per_due_time pins run_d2wwsnkgaqvsacwxjsaj, computed in Python from the original base32, because run ids are stored and compared across machines. Cron refuses 6 fields. id_head has a unit test for the valid forms and for an id of another form (no panic).

Red on the base: push run 41158092570 at a112726 (and every push run from 41150892225 on).
At 9eaed30 this PR's own ratchet run said that cmux-tui-core went down (853/52) and that no allow is without a reason. The remaining reds were only the automation hits above. Pass on the head 9e0d6b0: this PR's own clippy (changed cmux-tui packages) run (the same command, on the merge ref); the result goes in a comment.

Changelog

none

Observed / Not run

  • Observed: the hit diff of the three CI clippy JSON artifacts above. The original key algorithm, run in Python, for the pinned value. python3 scripts/cmux-next/prepush-gate.py: no new violations. The ratchet's reason scan (allow_without_reason) on the head: empty.
  • Fleet (cmux-ci, macOS): cmux-tui-rust-check.sh clippy and test with the three filters on 9e0d6b0; an_oversized_snapshot_drops passed on 9eaed30 (1 passed). I will add the other results in a comment.
  • Not run on this VM: no Rust compile (the rules do not allow it). The ratchet count itself comes from this PR's CI job, which is the only runner of rust_panic_ratchet.py.

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Fixes the feat-cmux-next panic ratchet, which went red when three individually-green PRs merged and pushed cmux-tui-core indexing and string-slice counts over baseline, and again when the cmux-automations series landed after this branch's base. The ratchet now fails with 856 indexing (baseline 853) and 57 string slices (baseline 52) in cmux-tui-core, 9 indexing and 3 string slices in the new cmux-automations crate, and 832 vs 831 indexing in cmux-tui, plus reason-less cast allows in cmux-chats-mirror.

Changes

  • launch_snapshot.rs: replace projection[key] with projection.get(key).and_then(Value::as_str).
  • personal_store.rs: replace bytes[0] with bytes.first().is_some_and(u8::is_ascii_lowercase).
  • terminal_adoption.rs: rewrite the template key derivation as a pure function using a zip copy and a dash-inserting writer.
  • cmux-automations: use ALPHABET.get, a 5-field slice pattern in cron, id_head in exec, split at NUL for the hostname, strip_prefix in is_automation_id, and an iterator in Args::parse.
  • cmux-chats-mirror: add the reason parameter to the four cast allows.

Behavior

  • The template key output is pinned by a test to the original algorithm's value, so restarts still find claims cut short.
  • projection.get() returns None where indexing returned Null; both become empty strings, so no change in behavior.
  • Run ids are pinned for one input, cron refuses 6 fields, and id_head handles ids of another form without panicking.
  • The capability test now includes a digit-first token, the case the old code guarded.

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

View guided diff Turn on auto-fix

teamleaderleo and others added 2 commits October 31, 2026 02:36
…chet requires

The panic ratchet's allow scan (scripts/cmux-next/rust_panic_ratchet.py) walks every
production source in cmux-tui, whatever packages a run selects, so these four reason-less
allows turn "clippy (changed cmux-tui packages)" red on feat-cmux-next and on every PR that
runs it. Each now says why the cast is fine. No code change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126
…e wave added (panic ratchet base red)

The panic ratchet on feat-cmux-next has been red since 591cc78
(00:34Z): cmux-tui-core indexing_slicing 856 > 853 and string_slice
57 > 52. Each PR passed alone; together they went over the baseline.
The new hits, found by a diff of the CI clippy JSON before and after:

- #28071 (ac1c524) launch_snapshot.rs: projection[key] -> get(key)
- #28056 (8f3e9c2) personal_store.rs: bytes[0] -> bytes.first()
- #27895 (15f07aa) terminal_adoption.rs: digest[..16] and five
  &hex[a..b] -> a zip copy and a dash-at-index writer, in a pure
  derive_template_workspace_key

The baseline is not raised. Behavior does not change:
- the template key test pins the derivation's output, computed by the
  original algorithm (Python hashlib), so a restart still finds its key;
- the capability test adds a digit-first token, the case bytes[0] checked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@lawrencecchen lawrencecchen added the risk:low Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
@cursor

cursor Bot commented Oct 31, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@lawrencecchen lawrencecchen added risk:normal Risk tier (docs/ci/risk-tiers.md) and removed risk:low Risk tier (docs/ci/risk-tiers.md) labels Oct 31, 2026
lawrencecchen referenced this pull request Oct 31, 2026
The macOS app mirrors acpmux's chat index (_acpmux/chats_watch) in Swift
(AcpmuxChatsStore + ChatsFeed). These tests pin the behavior the Rust
mirror must keep: acpmux's order, child chats folded, lenient decode, the
seq/lag bookkeeping (no Swift test covered it), activity that keeps a
chat's place, the project list, and the C ABI. The line parser is a stub
here, so the tests fail; the next commit implements it.
@blacksmith-sh

blacksmith-sh Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

Found 2 test failures on Blacksmith runners:

Failures

Test View Logs
test_a_picked_signing_label_has_a_rerun_alternative (main.RunsOnFallbackTests.test_
a_picked_signing_label_has_a_rerun_alternative)/
test_a_picked_signing_label_has_a_rerun_alternative (main.RunsOnFallbackTests.test_
a_picked_signing_label_has_a_rerun_alternative)
View Logs
test_no_runs_on_chain_ends_on_the_reserved_side_label (main.RunsOnFallbackTests.tes
t_no_runs_on_chain_ends_on_the_reserved_side_label)/
test_no_runs_on_chain_ends_on_the_reserved_side_label (main.RunsOnFallbackTests.tes
t_no_runs_on_chain_ends_on_the_reserved_side_label)
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@lawrencecchen

Copy link
Copy Markdown
Contributor Author

Review (Opus 5.5, review subagent): SHIP at 9eaed30

I found no correctness defect in the diff. Merging this PR alone does not make the job green: the base has new panic-ratchet reds that this PR does not touch (see "CI on this head" below).

Equivalence, line by line

  • cmux-tui/crates/cmux-tui-core/src/mux/terminal_adoption.rs:552,1208-1231: the inputs are the same (session_public_id().as_str(), then 0, then builder_key). The zip copies exactly the first 16 of the 32 digest bytes. The version and variant masks did not change. Dashes go before bytes 4, 6, 8 and 10, which are hex offsets 8, 12, 16 and 20, so the output is the same 8-4-4-4-12 form. I ran a Python model of the old and the new algorithm on 20,000 random inputs: the outputs were the same byte for byte.
  • Pinned value (terminal_adoption.rs:1243): I computed the original algorithm (hashlib) for ("sess-0123", "6b0c1a52-7d3e-4f6a-9b1c-2d3e4f5a6b7c"). The result is c20bfc16-7d4f-8de7-a6a2-8ec42b62a821, which is correct.
  • personal_store.rs:433: in the old code, bytes[0] ran only after the length check (1..=64) passed, so it could not panic. first().is_some_and(u8::is_ascii_lowercase) gives the same result for every input, including the empty string (the length check already refuses it). The new "1profiles" case (session_record_tests.rs:125) gets past the length and charset checks, so only the first-letter check refuses it. This makes it the right discriminator for this clause.
  • launch_snapshot.rs:351: Value::get returns None in every case where Index returned Null (a missing key or a non-object value). Both of them give "". No behavior change.
  • chats-mirror allows: only reason = "..." is new. The lint sets did not change.

New panic-lint hits: none. bytes[6] and bytes[8] index a [u8; 16] with constant in-bound indices, which clippy's indexing_slicing does not lint (the base code had the same two lines, and they were not counted). The zip, write! and first() cause no DENY_LINTS hits. The test module is #[cfg(test)], so the ratchet does not count it.

CI on this head (clippy (changed cmux-tui packages), run 41161519933, job 124419894933): red, from base findings only. Clippy passed, and the "Rust panic ratchet" step failed. The ratchet now says that cmux-tui-core counts went down, and it reports no allow without a reason. The two remaining reds are outside this diff:

  • cmux-automations: indexing_slicing 9 and string_slice 3 > new crate (must be 0). This is a new crate from ee37179 ("cmux automation: local schedules..."), which landed on feat-cmux-next after this branch's base 8e604c7.
  • cmux-tui: indexing_slicing 832 > baseline 831. Between this branch's base and the CI base a7ebd2a, the only commits that touch crates/cmux-tui/src are ee37179, d2c6a0d and c917912 (the cmux automation series).

These are base reds, so they do not hold this PR. But the base stays red after this lands, so the automation series needs a follow-up fix. The ratchet also tells you to lower the baseline for cmux-tui-core, acpmux and cmux-app-host (--update-baseline). This is optional. If you do not do it, later changes can add hits back up to the old counts.

Not run: I did not compile or test Rust on this VM, because the rules forbid it. The behavioral tests (the_template_workspace_key_is_the_same_uuidv8_as_the_first_derivation, a_session_capability_list_holds_only_unique_capability_tokens) still have to pass on the fleet.

…xing and 3 string-slice hits (panic ratchet base red)

On the merge ref of this PR, the panic ratchet is still red from the
cmux automation series that landed after this branch's base
(ee37179, d2c6a0d, c917912): cmux-automations is a new crate
(must be 0) with indexing_slicing 9 and string_slice 3, and cmux-tui
indexing_slicing 832 > 831 (cli/automation.rs `&args[i]`). It is red in
the same job as the cmux-tui-core hits, so the fixes go together.

- automation.rs base32: ALPHABET.get(5-bit index)
- cron.rs: a 5-field slice pattern instead of fields[0..4]
- exec.rs: id_head(id, prefix) instead of &a.id[5..13], &r.id[4..12];
  an id of another form is used whole instead of a panic
- runner.rs hostname: split at the first NUL instead of buf[..end]
- store.rs is_automation_id: strip_prefix instead of name[5..]
- cli/automation.rs Args::parse: an iterator instead of args[i]

The baseline is not raised. Tests: run_id pins one value computed in
Python from the original base32 (the id is stored and compared across
machines); cron refuses 6 fields; id_head covers the valid forms and an
id of another form.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@lawrencecchen lawrencecchen changed the title base red: cmux-tui-core panic ratchet: remove the merge wave's 3 indexing and 5 string-slice hits; reasons on chats-mirror's allows base red: panic ratchet: remove the merge wave's cmux-tui-core and automation index/slice hits; reasons on chats-mirror's allows Oct 31, 2026
lawrencecchen referenced this pull request Oct 31, 2026
…nd a launchd runner

New crate cmux-automations (store, cron/presets/every/at, catch-up policy,
deterministic run ids, flock runner lock, process executor with group
timeout kill) and the cmux automation CLI: create, list, show, run, pause,
resume, edit, history, logs, delete, runner [install|uninstall|status].
docs/automations-platonic-ideal.md slice 1.

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

Copy link
Copy Markdown
Contributor Author

Review (Opus 5.5, review subagent): SHIP at 9e0d6b0

Scope: the whole PR diff origin/feat-cmux-next...9e0d6b0416b (15 files), with extra care on 9e0d6b0. Correctness first. I did not compile or run Rust on the review machine.

Is the behavior the same? (9e0d6b0)

  • cmux-automations/src/automation.rs:95-98: ALPHABET is &[u8; 32] and the index is & 31, so get always returns Some. char::from(u8) is the same as as char. The output is the same for all inputs.
  • cmux-automations/src/cron.rs:43-64: let &[minute, hour, day, month, weekday] = fields.as_slice() else matches exactly when len == 5, so it accepts and rejects the same inputs as the old len() != 5 check. The bindings are &str (Copy), and the else branch can still read fields.len(). day != "*" / weekday != "*" are the same comparisons as before. The new "* * * * * *" case in tests/schedule.rs:32 covers the "more than 5 fields" side.
  • cmux-automations/src/runner.rs:52-54: split(..).next() always gives at least one segment, so the ? never returns early. The segment is the bytes before the first NUL, or the whole buffer when there is no NUL. That is the same as the old position(..).unwrap_or(len) slice.
  • cmux-automations/src/store.rs:121-126: strip_prefix("auto_") followed by the byte check is the same as starts_with followed by [5..].
  • cmux-tui/src/cli/automation.rs:99-122: the loop body has no continue. Every path either pushes once or returns. The missing-value path now consumes the next arg through rest.next(), which is what the old i += 1; args.get(i) did. The borrow is valid because arg: &String borrows args, not rest. while_let_on_iterator does not fire, because the iterator is also used inside the loop body. The CI clippy run below confirms this.
  • cmux-automations/src/exec.rs:153,223-226 (id_head): for ids this code creates (auto_ + 20 base32 from new_automation_id, run_ + 20 base32 from digest_id), the output is byte for byte the same as &id[5..13] / &id[4..12]. Non-blocking note: for a hand-edited automation.json or run record whose id has no prefix but is 13 or more ASCII bytes long, the old code used bytes 5..13 and did not panic, while id_head now uses the whole id. This only changes the acpmux session label for malformed data. It is not a correctness defect.

Earlier commits (re-checked on the merged head)

  • terminal_adoption.rs:1208-1231: the zip copies digest bytes 0..16. Dashes go before byte indices 4, 6, 8 and 10, which equals hex offsets 8, 12, 16 and 20. bytes[6] / bytes[8] are constant in-bounds indices on [u8; 16], which indexing_slicing does not flag.
  • launch_snapshot.rs:350-352: Value[&str] gives Null for a missing key or a non-object, and get gives None in the same cases. Both produce "".
  • personal_store.rs:433: first().is_some_and(..) is the same as bytes[0] behind the len >= 1 short-circuit. "1profiles" covers it.
  • chats-mirror allows: these only add reason =, with no code change.

Pinned values (recomputed in Python from the base revision 51ed666)

  • run.rs digest_id + automation.rs base32 (u32 buffer with wrapping shl), run_id("auto_aaaaaaaaaaaaaaaaaaaa", 1_793_350_800) = run_d2wwsnkgaqvsacwxjsaj. This matches tests/runner.rs:332.
  • The original template_workspace_key algorithm on (sess-0123, 6b0c1a52-7d3e-4f6a-9b1c-2d3e4f5a6b7c) = c20bfc16-7d4f-8de7-a6a2-8ec42b62a821. This matches terminal_adoption.rs:1243.

Deny lints: I found no new unwrap_used, expect_used, panic, unreachable, todo, unimplemented, indexing_slicing, string_slice or panic_in_result_fn hits in production code. The new assert_eq! uses are all in #[cfg(test)] modules or tests/, and the ratchet build (--lib --bins) does not compile those.

CI, clippy (changed cmux-tui packages) on this head (job 124422331085, merge ref 44afeb1 = 9e0d6b0 into 9e23760): pass, 3m28s.

  • cargo clippy --locked --keep-going -p cmux-automations -p cmux-chats-mirror -p cmux-remote -p cmux-terminal-client -p cmux-tui -p cmux-tui-core --all-targets -- -D warnings: clean.
  • Panic ratchet: 51 crates checked, 18 at deny, no deny failure.
  • Warnings only (not deny tier): arithmetic_side_effects and cast_possible_truncation are above baseline in acpmux, cmux-automations (new crate), cmux-tui, cmux-tui-core and cmux-wg. There is also "counts went down in acpmux, cmux-app-host; lower the baseline". None of these fail the job.
  • The other non-green item I looked at, resolve head and base (fast-gates), has the conclusion cancelled. That is a run or infrastructure state, not a failure in this diff.

No correctness defects found.

@lawrencecchen

Copy link
Copy Markdown
Contributor Author

Fleet results at the head 9e0d6b0 (cmux-ci, scripts/ci/cmux-tui-rust-check.sh; the controller ran them on Blacksmith step overflow):

This PR's CI clippy (changed cmux-tui packages) on merge ref 44afeb1 (head into 9e23760): pass. The ratchet log says rust-panic-ratchet: 51 crates checked, 18 at deny, with no RED.

@lawrencecchen

Copy link
Copy Markdown
Contributor Author

The last two fleet tests at 9e0d6b0 are green: test template_workspace_key 1 passed (https://github.com/manaflow-ai/cmuxterm-hq/actions/runs/41162434375) and test cron_parses 1 passed (https://github.com/manaflow-ai/cmuxterm-hq/actions/runs/41162436695).

…nic-ratchet

# Conflicts:
#	cmux-tui/crates/cmux-chats-mirror/src/chat.rs
#	cmux-tui/crates/cmux-chats-mirror/src/feed.rs
#	cmux-tui/crates/cmux-chats-mirror/src/index.rs
@lawrencecchen lawrencecchen removed the ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds label Oct 31, 2026
@lawrencecchen

Copy link
Copy Markdown
Contributor Author

Review (Opus 5.5, review subagent): SHIP at ddd1753

No correctness defect in the diff. But the panic ratchet is still red at this head. The red comes from new hits on the tip, not from this PR (details below).

Merge resolution

  • git diff ddd1753d663^2 ddd1753d663 (the PR's effective diff against the tip it merged, 4a05792) has the same 12 files as 9e0d6b0416b against its old base 51ed666, minus the 3 cmux-chats-mirror files. The added and removed lines are byte-identical to the old PR diff without cmux-chats-mirror.
  • cmux-chats-mirror is gone at the head (git ls-tree is empty), as f7e5bb6 (an ancestor of ^2) deleted it. Taking the deletion is correct: the reason strings went onto allows in a crate that no longer exists, so nothing is lost.
  • No other tip file shows up in the diff. The tip did not change any of the 12 patched files between 51ed666 and 4a05792, so every hunk still patches the same code.

Correctness (read; nothing compiled here)

  • exec.rs id_head: for valid ids it gives the same 8 characters as &a.id[5..13] / &r.id[4..12], and the whole id otherwise. runner.rs split(NUL).next() always yields a slice, so the ? never fires and the result is the same as before. store.rs strip_prefix, the base32 get (5-bit index), the cron slice pattern (6 fields are now refused, with a test) and the CLI Args::parse iterator (no continue paths, value consumption is the same) all keep the old behavior.
  • terminal_adoption.rs derive_template_workspace_key: bytes[6]/bytes[8] index a [u8; 16] with constants, so no lint hit. I recomputed the pinned c20bfc16-7d4f-8de7-a6a2-8ec42b62a821 with the original algorithm in Python: it matches. I also recomputed run_d2wwsnkgaqvsacwxjsaj (the base32 digest of auto_aaaaaaaaaaaaaaaaaaaa/schedule/1793350800): it matches.
  • launch_snapshot.rs .get(key): it gives the same "" as Value indexing, which returned Null and did not panic. personal_store.rs first().is_some_and: the same behavior (the length check runs first), and 1profiles covers it.

CI: clippy (changed cmux-tui packages), job 124426587561: failure

  • cargo clippy ... --all-targets -- -D warnings on the 5 changed packages passed.
  • rust-panic-ratchet: 50 crates checked, 17 at deny then rust-panic-ratchet: RED:
    • cmux-tui: clippy::indexing_slicing 841 > baseline 831
    • cmux-tui-core: clippy::unwrap_used 1042 > baseline 1035
    • cmux-tui-core: clippy::indexing_slicing 857 > baseline 853
  • cmux-automations has no deny-lint hit now (only tracked-lint warnings: arithmetic 24, casts 9), and the cmux-tui-core string_slice count is back under its baseline. So everything this PR set out to remove is gone.
  • The remaining hits came from tip commits that landed after this branch's first base and that this PR does not touch: apps/deploy.rs (045f9e0 / e62b402 / 8024f86: self.inner.lock().unwrap() at 385, 452, ...; manifest["deploy"]["server"] at 121 and 393), cli/apps_list.rs (9d1b1f9, 0012704) and mux/pty_reclaim.rs (9e23760). The base is redder than this head, so this PR causes no red of its own.

Findings (not correctness defects)

  1. Incomplete as a base-red fix: after this PR lands, the ratchet stays red on cmux-tui (+10 indexing) and cmux-tui-core (+7 unwrap, +4 indexing). These hits are in the same job, so by this PR's own rule ("each fix stays red on the other's red") they belong here or in an immediate follow-up. Use the head run's panic-clippy JSON artifact to find the new sites.
  2. The PR body says "Pass on the head 9e0d6b0: this PR's own clippy (changed cmux-tui packages) run". That run was cancelled. At ddd1753 the job is red for the reasons above. Correct the body before anyone reads it as "the base red is fixed".
  3. The tip has moved again (517a276). Its changes to cmux-tui and cmux-tui-core (e.g. headless/dev_orphan_exit.rs) are not in this head and can add more hits.

@lawrencecchen lawrencecchen added the ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds label Oct 31, 2026
@lawrencecchen
lawrencecchen merged commit db183fa into feat-cmux-next Oct 31, 2026
91 of 111 checks passed
@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review ddd1753: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr28808 -f ref=base-red/panic-ratchet -f platform=macos -f backend_mode=local

red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base 4a05792; does not block

Shipped in:

lawrencecchen added a commit that referenced this pull request Oct 31, 2026
…c ratchet) (#28847)

The panic ratchet is red on feat-cmux-next again after #28808: the apps
series reached the tip at 03:15Z (9d1b1f9, 045f9e0, e62b402,
0012704, 8024f86), after #28808's green run. New hits, found by
diffing the CI clippy JSON of #28808's runs before and after:

- cmux-tui indexing_slicing 841 > 831: cli/apps_list.rs reads of an
  owned reply Value (value["id"], ["ok"], ["data"], ["error_code"],
  ["error"], scope["scope"|"risk"|"optional"|"reason"]) -> get(...) with
  the same result for every input, and args["query"] = ... -> JsonSet::set
- cmux-tui-core indexing_slicing 857 > 853: apps/deploy.rs
  manifest["deploy"]["server"|"targets"] -> JsonFields::field; store.rs
  result["instance"] = ... and supervisor.rs row["instance"] = ... ->
  JsonSet::set
- cmux-tui-core unwrap_used 1042 > 1035: apps/deploy.rs seven
  .lock().unwrap() -> RecoverPoison, as the rest of the crate does

The baseline is not raised. Reads give the same values (a missing key
was Null before and is None now; both give the same default). The
writes are on objects, where set does what IndexMut did.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was previously deployed

3 inactive deployments
artifacts — ddd1753d Deployed Oct 31, 2026 by lawrencecchen via publish tree-addressed cmux-tui #87053
sentry-dsyms — ddd1753d Deployed Oct 31, 2026 by lawrencecchen via upload cmux-tui dSYMs to Sentry #87053
ci-routing-agent — ddd1753d Deployed Oct 31, 2026 by lawrencecchen via cmux-tui tree preflight #87053
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants