Repository navigation
base red: panic ratchet: remove the merge wave's cmux-tui-core and automation index/slice hits; reasons on chats-mirror's allows - #28808
Conversation
…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>
Bugbot needs on-demand usage enabledBugbot 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. |
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.
|
Found 2 test failures on Blacksmith runners: Failures
|
|
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
New panic-lint hits: none. CI on this head (
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 ( Not run: I did not compile or test Rust on this VM, because the rules forbid it. The behavioral tests ( |
…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>
…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>
|
Review (Opus 5.5, review subagent): SHIP at 9e0d6b0 Scope: the whole PR diff Is the behavior the same? (9e0d6b0)
Earlier commits (re-checked on the merged head)
Pinned values (recomputed in Python from the base revision 51ed666)
Deny lints: I found no new CI,
No correctness defects found. |
|
The last two fleet tests at 9e0d6b0 are green: |
…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
|
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
Correctness (read; nothing compiled here)
CI:
Findings (not correctness defects)
|
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base 4a05792; does not block Shipped in:
|
…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>
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
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 everyfeat-cmux-nextpush since 591cc78 (00:34Z). The last green push was dfaa79e / 2b79f24 only because those pushes did not check cmux-tui-core: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:
launch_snapshot.rsprojection[key]projection.get(key).and_then(Value::as_str)personal_store.rsbytes[0]bytes.first().is_some_and(u8::is_ascii_lowercase)terminal_adoption.rsdigest[..16],&hex[a..b]derive_template_workspace_key: a zip copy and a writer that puts a dash before bytes 4, 6, 8 and 10| 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_prefixinis_automation_id, an iterator inArgs::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_derivationpins the key for one input. I computed the expected value with the original algorithm (Pythonhashlib), so a restart still finds a claim that was cut short.a_session_capability_list_holds_only_unique_capability_tokensadds a token that starts with a digit (1profiles). That is the case thatbytes[0]checked.projection[key]change returns the same values (getgivesNonewhere indexing gaveNull, and both become"").run_ids_are_deterministic_per_due_timepinsrun_d2wwsnkgaqvsacwxjsaj, computed in Python from the original base32, because run ids are stored and compared across machines. Cron refuses 6 fields.id_headhas 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
python3 scripts/cmux-next/prepush-gate.py: no new violations. The ratchet's reason scan (allow_without_reason) on the head: empty.cmux-tui-rust-check.sh clippyandtestwith the three filters on 9e0d6b0;an_oversized_snapshot_dropspassed on 9eaed30 (1 passed). I will add the other results in a comment.rust_panic_ratchet.py.Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Fixes the
feat-cmux-nextpanic ratchet, which went red when three individually-green PRs merged and pushedcmux-tui-coreindexing and string-slice counts over baseline, and again when thecmux-automationsseries landed after this branch's base. The ratchet now fails with 856 indexing (baseline 853) and 57 string slices (baseline 52) incmux-tui-core, 9 indexing and 3 string slices in the newcmux-automationscrate, and 832 vs 831 indexing incmux-tui, plus reason-less cast allows incmux-chats-mirror.Changes
launch_snapshot.rs: replaceprojection[key]withprojection.get(key).and_then(Value::as_str).personal_store.rs: replacebytes[0]withbytes.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: useALPHABET.get, a 5-field slice pattern in cron,id_headin exec, split at NUL for the hostname,strip_prefixinis_automation_id, and an iterator inArgs::parse.cmux-chats-mirror: add thereasonparameter to the four cast allows.Behavior
projection.get()returnsNonewhere indexing returnedNull; both become empty strings, so no change in behavior.id_headhandles ids of another form without panicking.Written for commit ddd1753. Summary will update on new commits.