cmux-next checks: the two namespace enums the convention lint rejects become instantiable structs
cmux-next checks (god files, concurrency, crash safety, l10n) is red on every open feat-cmux-next PR. The namespace-type rule rejects two all-static public enums, and a lint red also skips the checks that run after it in the same job (#22197), so the cost is larger than the two lines it names.
ERROR namespace-type Packages/macOS/CmuxNext/Sources/CmuxNextDesign/AttentionHighlightLook.swift:70 enum AgentTurnRing (all-static public surface, not instantiable)
ERROR namespace-type Packages/macOS/CmuxNext/Sources/CmuxNextSettings/AgentPaneNeedsYouSetting.swift:6 enum AgentPaneNeedsYouSetting (all-static public surface, not instantiable)
The fix
scripts/lint-ios-package-conventions.sh --namespace-fix, the repo's own fixer (the one CLAUDE.md names, with CI's non-mutating lint as the backstop), makes each an instantiable struct with a public init. No call site changes: every reference is a static member (AgentTurnRing.tunable, AgentPaneNeedsYouSetting.enabledPath, .fallback), nothing extends or conforms either type, and neither is used as a metatype, generic argument or switch subject. No behavior changes.
Why this is a base red, not one lane's
Two PRs of this lane were the control: #24269 changes one markdown paragraph and #24262 changes Swift, and both produce a byte-identical failure set across the same five checks (normalizing timestamps and tmp paths). A markdown-only change cannot add a convention violation, and both violations are present at base tip 50a7cb4dc7dc4b89e5097a2e3faafca46982eae9.
The other four reds in that set are not this change's and are left alone: the debug.tab_switch / new_workspace harness failures (the window draws no frames ... an occluded or unlit console), the two live summary-*.json failures, and test_every_submodule_free_checkout_on_an_owned_runner_resets_submodules.
Observed / Not run
Observed: ./scripts/lint-ios-package-conventions.sh --namespace-fix went from the two ERROR lines above to OK: no unjustified convention violations. python3 scripts/cmux-next/prepush-gate.py → no new violations. Both failing job logs downloaded and diffed to establish the control above.
Not run: no local Swift build or test (agents do not compile on a person's machine); this PR's own cmux-next app compile (build fleet) and cmux-next checks are the compile and lint evidence. The fleet queue was ~473 deep at the time of writing, so a separate dispatched compile-check would only have queued behind this PR's own.
Changelog
none
🤖 Generated with Claude Code
Agent session: big-red
![View with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v3-3x.png)
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Fixes cmux-next checks being red on every feat-cmux-next PR by converting the two all-static public enums the namespace-type lint rejects into instantiable structs with public inits.
Both violations exist at base tip, and a markdown-only PR produces the same failure set, so this is a base red rather than a lane issue. The fix uses the repo's own scripts/lint-ios-package-conventions.sh --namespace-fix. A lint error also skips the checks that run after it in the same job, so it costs more than the two lines it names. Every reference is a static member, so no call sites or behavior change.