Skip to content

fix(cli): restore Encodable synthesis for PendingCursorShellApproval - #10808

Closed
lawrencecchen wants to merge 3 commits into
mainfrom
fix-cursor-approval-encodable
Closed

lawrencecchen wants to merge 3 commits into
mainfrom
fix-cursor-approval-encodable

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented Aug 26, 2026 •

Copy link
Copy Markdown
Contributor

#9349 added a decode-only legacyCommand = "command" CodingKey plus a custom init(from:) to ClaudeHookSessionRecord.PendingCursorShellApproval, but no encode(to:). Swift refuses to synthesize Encodable when a CodingKeys case matches no stored property, so the cmux-cli target fails to compile on current main:

CLI/cmux.swift:155:12: error: type 'ClaudeHookSessionRecord.PendingCursorShellApproval' does not conform to protocol 'Encodable'
CLI/cmux.swift:227:18: note: CodingKey case 'legacyCommand' does not match any stored properties

Hit by two independent fleet builds of main (35e888d) tonight. Fix: explicit encode(to:) that writes the seven stored fields and never emits the legacy key, preserving the decode-side migration exactly. No behavior change for records written by the new code.

Open question for reviewers: how did #9349 pass its checks? Worth confirming the merge gate actually compiles cmux-cli.


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

Summary by CodeRabbit

  • Bug Fixes
    • Improved record serialization to consistently preserve fingerprints, timestamps, identifiers, display commands, lengths, and tool-use requirements.
    • Excluded a legacy command field from serialized output to prevent outdated data from being written.

#9349 added a decode-only legacyCommand CodingKey plus a custom
init(from:), which kills Encodable synthesis: the cmux-cli target
fails to compile on main (error: CodingKey case 'legacyCommand' does
not match any stored properties). Encode the stored fields explicitly
and never emit the legacy key.
@coderabbitai

coderabbitai Bot commented Aug 26, 2026 •

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

Next included review available in 2 minutes.

View limit details

Limit details: You’ve used all 10 included reviews currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: debac56e-ddc0-4f2c-a035-a12155b8dbb9

📥 Commits

Reviewing files that changed from the base of the PR and between 136bcb0 and f628cae.

📒 Files selected for processing (3)
  • CLI/cmux.swift
  • Sources/TerminalNotificationPolicyInFlightStore.swift
  • Sources/TerminalNotificationStore.swift

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 82127086-2d19-4755-9b79-4729e1018bb7

📥 Commits

Reviewing files that changed from the base of the PR and between 35e888d and 136bcb0.

📒 Files selected for processing (1)
  • CLI/cmux.swift

Included review availability: Your plan provides up to 10 included reviews per hour; 2 remain after this review.


📝 Walkthrough

Walkthrough

The record type now defines custom Encodable serialization. It writes its stored metadata and excludes the legacy decoding-only command field.

Changes

Record serialization

Layer / File(s) Summary
Custom record encoding
CLI/cmux.swift
The encoder writes the fingerprint, length, display command, optional identifiers, timestamp, and tool-use requirement. It omits the legacy decoding-only command field.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 136bc

This localized serialization fix restores CLI compilation and preserves the existing decode migration without introducing an actionable merge-blocking risk; it is merge-ready after normal checks and review.

Suggested reviewers: austinywang, azooz2003-bit

🚥 Pre-merge checks | ✅ 24 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description gives a detailed summary, explains the compilation failure, and describes the encoding fix. It does not include the required Testing section, test results, checklist, or review-trigger… Add the Testing section with commands and verification results. Complete the applicable checklist items and confirm that review bots and review comments were handled.
✅ Passed checks (24 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the CLI fix and the restoration of Encodable synthesis for PendingCursorShellApproval.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Swift Actor Isolation ✅ Passed PASS: The diff only adds PendingCursorShellApproval.encode(to:) and encodes its seven stored fields. It adds no @MainActor, Sendable, actor, async service protocol, observable store, or backgrou…
Cmux Swift Blocking Runtime ✅ Passed PASS: The PR changes only CLI/cmux.swift and adds PendingCursorShellApproval.encode(to:). The method performs keyed field encoding only. It adds no semaphore, wait, sleep, delayed dispatch, pollin…
Cmux Browser Automation Off-Main ✅ Passed PASS: The pull request changes only CLI/cmux.swift. The diff adds PendingCursorShellApproval.encode(to:) for record fields and does not modify Sources/TerminalController.swift, `ControlCommandEx…
Cmux Expensive Synchronous Load ✅ Passed PASS: The pull request adds only PendingCursorShellApproval.encode(to:) in CLI/cmux.swift. The new code writes seven scalar/optional stored fields to an encoder. It adds no agent-history load, fil…
Cmux Cache Substitution Correctness ✅ Passed PASS. The actual commit changes only CLI/cmux.swift by adding PendingCursorShellApproval.encode(to:). It encodes the stored fields and omits the decode-only legacyCommand key. The diff does not …
Cmux No Hacky Sleeps ✅ Passed PASS. The pull request changes only CLI/cmux.swift. The diff adds encode(to:) for PendingCursorShellApproval and introduces no sleeps, timers, polling, delayed dispatch, or wall-clock waits. `ru…
Cmux Algorithmic Complexity ✅ Passed PASS: The pull request adds only seven direct keyed encoding operations in CLI/cmux.swift. The implementation does not iterate over a scalable collection, rescan records, sort, filter, join data, or…
Cmux Swift Concurrency ✅ Passed PASS: The commit changes only CLI/cmux.swift and adds a synchronous encode(to:) method. The method writes stored Codable fields and does not add DispatchQueue, Combine, completion-handler, or `T…
Cmux Swift @Concurrent ✅ Passed PASS — The diff adds only a synchronous encode(to:) method to PendingCursorShellApproval. It adds no async, nonisolated, @concurrent, actor isolation, or UI-isolation call-site changes. The …
Cmux Swift Package Boundaries ✅ Passed PASS. The diff adds only encode(to:) to the existing ClaudeHookSessionRecord.PendingCursorShellApproval type in CLI/cmux.swift; it does not introduce or materially expand a feature. Xcode projec…
Cmux Swiftpm Lockfiles ✅ Passed PASS: The pull request changes only CLI/cmux.swift. The diff adds encode(to:) and changes no Package.swift, Package.resolved, .gitignore, workflow, or Xcode project package references. There…
Cmux Swift Logging ✅ Passed PASS: The commit changes only CLI/cmux.swift by adding PendingCursorShellApproval.encode(to:). The added code performs keyed serialization and adds no print, debugPrint, dump, NSLog, ad ho…
Cmux User-Facing Error Privacy ✅ Passed PASS — The diff only adds PendingCursorShellApproval.encode(to:) and a developer-only comment. It writes existing persisted fields and omits legacyCommand; it adds no user-facing error, alert, com…
Cmux Full Internationalization ✅ Passed PASS: The diff adds only a developer comment and encode(to:) persistence logic in CLI/cmux.swift. The method writes existing stored fields through CodingKeys; it adds no user-facing text, locali…
Cmux Swiftui State Layout ✅ Passed PASS: The diff changes only CLI/cmux.swift and adds encode(to:) to the Codable record PendingCursorShellApproval. The changed lines add no SwiftUI state, layout measurement, lazy/list row stor…
Cmux Architecture Rethink ✅ Passed PASS. The PR changes only PendingCursorShellApproval.encode(to:) in CLI/cmux.swift. It writes the seven stored fields and omits the decode-only legacyCommand key. The diff adds no sleeps, delaye…
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PASS — The PR changes only CLI/cmux.swift by adding encode(to:) for PendingCursorShellApproval. The diff adds no NSWindow, NSPanel, NSWindowController, SwiftUI Window/WindowGroup, clos…
Cmux Source Artifacts ✅ Passed PASS: The only changed path is CLI/cmux.swift, a tracked hand-written Swift source file. The diff adds an encode(to:) implementation and contains no local output, generated artifact, cache, temp d…
Cmux No Test Or Debug Seam In Production Source ✅ Passed PASS: The only changed file is CLI/cmux.swift, which is outside the rule scope of production Swift files under **/Sources/**. The diff adds encode(to:) for serialization and adds no #if DEBUG …
Cmux No Ambient Global State ✅ Passed PASS. The diff adds only encode(to:) at CLI/cmux.swift:255, inside the existing ClaudeHookSessionRecord.PendingCursorShellApproval struct. It is an instance Encodable conformance method. It ad…
Full details: Description check

Explanation

The description gives a detailed summary, explains the compilation failure, and describes the encoding fix. It does not include the required Testing section, test results, checklist, or review-trigger confirmation. The Demo Video section is not necessary because this is not a UI change.

Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (1 skipped: 1 too large.)

Full details: Cmux Swift Actor Isolation

Explanation

PASS: The diff only adds PendingCursorShellApproval.encode(to:) and encodes its seven stored fields. It adds no @MainActor, Sendable, actor, async service protocol, observable store, or background UI access. PendingCursorShellApproval and ClaudeHookSessionRecord predate this pull request, and the CLI target remains configured with Swift 5.0. The change does not introduce or materially worsen any listed actor-isolation mistake.

Full details: Cmux Swift Blocking Runtime

Explanation

PASS: The PR changes only CLI/cmux.swift and adds PendingCursorShellApproval.encode(to:). The method performs keyed field encoding only. It adds no semaphore, wait, sleep, delayed dispatch, polling, main-queue sync, or manual lock. Existing blocking constructs in CLI/cmux.swift are outside the PR diff and are therefore allowed as unchanged code.

Full details: Cmux Browser Automation Off-Main

Explanation

PASS: The pull request changes only CLI/cmux.swift. The diff adds PendingCursorShellApproval.encode(to:) for record fields and does not modify Sources/TerminalController.swift, ControlCommandExecutionPolicy.swift, browser socket routing, WebKit/AppKit access, or policy tests. The browser automation check is not applicable.

Full details: Cmux Expensive Synchronous Load

Explanation

PASS: The pull request adds only PendingCursorShellApproval.encode(to:) in CLI/cmux.swift. The new code writes seven scalar/optional stored fields to an encoder. It adds no agent-history load, file read, JSON decode, directory scan, syscall loop, main-actor path, or interactive handler. The custom rule also allows existing call sites that the diff does not introduce or worsen.

Full details: Cmux Cache Substitution Correctness

Explanation

PASS. The actual commit changes only CLI/cmux.swift by adding PendingCursorShellApproval.encode(to:). It encodes the stored fields and omits the decode-only legacyCommand key. The diff does not replace an authoritative read with a cached or opportunistic value, so neither cold-cache nor stale-cache handling applies.

Full details: Cmux No Hacky Sleeps

Explanation

PASS. The pull request changes only CLI/cmux.swift. The diff adds encode(to:) for PendingCursorShellApproval and introduces no sleeps, timers, polling, delayed dispatch, or wall-clock waits. runtime-no-hacky-sleeps.md applies to non-Swift production code; Swift blocking behavior is covered by the separate Swift check.

Full details: Cmux Algorithmic Complexity

Explanation

PASS: The pull request adds only seven direct keyed encoding operations in CLI/cmux.swift. The implementation does not iterate over a scalable collection, rescan records, sort, filter, join data, or add a hot-path algorithm. The changed work is fixed-size record serialization, so the algorithmic-complexity failure conditions do not apply. Existing approval-collection scans are outside the changed hunk and are not worsened by this pull request.

Full details: Cmux Swift Concurrency

Explanation

PASS: The commit changes only CLI/cmux.swift and adds a synchronous encode(to:) method. The method writes stored Codable fields and does not add DispatchQueue, Combine, completion-handler, or Task usage. Therefore, the diff does not introduce or expand any legacy async pattern listed by the check.

Full details: Cmux Swift `@Concurrent`

Explanation

PASS — The diff adds only a synchronous encode(to:) method to PendingCursorShellApproval. It adds no async, nonisolated, @concurrent, actor isolation, or UI-isolation call-site changes. The custom Swift concurrency failure conditions do not apply.

Full details: Cmux Swift Package Boundaries

Explanation

PASS. The diff adds only encode(to:) to the existing ClaudeHookSessionRecord.PendingCursorShellApproval type in CLI/cmux.swift; it does not introduce or materially expand a feature. Xcode project evidence places CLI/cmux.swift in the separate cmux-cli tool target, not the cmux app target. Repository references show this type is used within the CLI implementation, with no demonstrated cross-surface package reuse. Therefore, the explicit Swift package-boundary failure conditions do not apply.

Full details: Cmux Swiftpm Lockfiles

Explanation

PASS: The pull request changes only CLI/cmux.swift. The diff adds encode(to:) and changes no Package.swift, Package.resolved, .gitignore, workflow, or Xcode project package references. Therefore none of the SwiftPM lockfile failure conditions apply.

Full details: Cmux Swift Logging

Explanation

PASS: The commit changes only CLI/cmux.swift by adding PendingCursorShellApproval.encode(to:). The added code performs keyed serialization and adds no print, debugPrint, dump, NSLog, ad hoc logging, Logger, or sensitive-data logging. Existing print calls in the CLI are unchanged, and CLI output is explicitly allowed.

Full details: Cmux User-Facing Error Privacy

Explanation

PASS — The diff only adds PendingCursorShellApproval.encode(to:) and a developer-only comment. It writes existing persisted fields and omits legacyCommand; it adds no user-facing error, alert, command output, API error body, or recovery text. The affected display value is pre-existing and is generated as the generic localized text “Approval needed.” The added encoding path writes state through JSONEncoder to the hook state file, not to user-visible output. No prohibited vendor names, raw upstream messages, credentials, tokens, or payload dumps are introduced.

Full details: Cmux Full Internationalization

Explanation

PASS: The diff adds only a developer comment and encode(to:) persistence logic in CLI/cmux.swift. The method writes existing stored fields through CodingKeys; it adds no user-facing text, localization key, catalog entry, web message, or locale data. The legacyCommand and field names are serialization tokens covered by the allowed protocol/config-token case.

Full details: Cmux Swiftui State Layout

Explanation

PASS: The diff changes only CLI/cmux.swift and adds encode(to:) to the Codable record PendingCursorShellApproval. The changed lines add no SwiftUI state, layout measurement, lazy/list row store reference, or render-time state mutation. The check is therefore inapplicable.

Full details: Cmux Architecture Rethink

Explanation

PASS. The PR changes only PendingCursorShellApproval.encode(to:) in CLI/cmux.swift. It writes the seven stored fields and omits the decode-only legacyCommand key. The diff adds no sleeps, delayed dispatch, polling, locks, observers, side channels, duplicate entrypoints, or UI lifecycle ownership. This is a small correctness fix with a clear serialization invariant.

Full details: Cmux Swift Auxiliary Window Close Shortcuts

Explanation

PASS — The PR changes only CLI/cmux.swift by adding encode(to:) for PendingCursorShellApproval. The diff adds no NSWindow, NSPanel, NSWindowController, SwiftUI Window/WindowGroup, close-shortcut routing, or auxiliary-window identifier code. The auxiliary-window rule is therefore not applicable.

Full details: Cmux Source Artifacts

Explanation

PASS: The only changed path is CLI/cmux.swift, a tracked hand-written Swift source file. The diff adds an encode(to:) implementation and contains no local output, generated artifact, cache, temp directory, build output, or broad scratch directory. The change fits the rule's intentional source-file exception.

Full details: Cmux No Test Or Debug Seam In Production Source

Explanation

PASS: The only changed file is CLI/cmux.swift, which is outside the rule scope of production Swift files under **/Sources/**. The diff adds encode(to:) for serialization and adds no #if DEBUG block, test/debug-named member, visibility widening, or test-observation accessor.

Full details: Cmux No Ambient Global State

Explanation

PASS. The diff adds only encode(to:) at CLI/cmux.swift:255, inside the existing ClaudeHookSessionRecord.PendingCursorShellApproval struct. It is an instance Encodable conformance method. It adds no top-level function, mutable global, static-only namespace, or singleton. The local var container is method-local state, which does not match the rule's failure conditions.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix-cursor-approval-encodable

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Same-scope 'let projectRoot = projectRoot ?? cwdURL' after
'var projectRoot: URL?' is an invalid redeclaration and breaks the
build; bind the resolved root under a new name.
@lawrencecchen

Copy link
Copy Markdown
Contributor Author

Pushed 32f4c3e: main has a second compile error from #9349 at CLI/cmux.swift:33116 (same-scope let projectRoot = projectRoot ?? cwdURL after var projectRoot: URL? is an invalid redeclaration). Renamed the rebinding to resolvedProjectRoot so this PR fully restores a compilable main. Both fixes are also cherry-picked into #10815 to unblock its tagged build; I will rebase them away once this merges.

TerminalNotificationPolicyInFlightStore's guarded dictionary compactMap
fails ElementOfResult inference on the fleet toolchain; annotate it and
the sibling guarded closure in TerminalNotificationStore explicitly.
azooz2003-bit added a commit that referenced this pull request Aug 26, 2026
… no connection-driven pops (#10821)

* iOS: fix main-red compile in MobileWorkspaceAggregation

Same fix as #10813 (identical hunk,
merges clean); carried here so this branch's packages build.

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

* iOS: quiet reconnecting UX on the workspace detail screen

Reconnecting now surfaces as a mini spinner in the title bar's existing
indicator slot instead of the terminal-covering status pill; the pill
remains only for the unavailable state, where it still offers Reconnect.

The terminal stays fully interactive while a reconnect is in flight:
input blocking (and keyboard resignation) now trigger only on
unavailable or failed foreground recovery, and a send racing the dead
window fails visibly through the send-status pill.

Connection churn can no longer push the user out of the workspace
detail screen. WorkspaceAbsenceAuthority decides whether a workspace's
absence from a freshly derived list is authoritative (deleted, closed,
unpaired - selection retargets and the detail pops as before) or a
transient hole from a degraded connection (selection holds and the
detail keeps rendering its last-known snapshot). The held-selection
window also stops the selectedWorkspace first-row fallback from
clobbering the terminal selection or mispairing input ids.

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

* cli: fix main-red Encodable synthesis for PendingCursorShellApproval

Same fix as #10808 (encode(to:)
hunk only); carried here so this branch's Mac build compiles.

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

* iOS: fix second main-red from #10662 (fileprivate groupActionCapabilities)

Same hunk as #10813; the +Actions
file in the same target calls it, so archive fails on main.

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

* iOS: gate terminal input on the effective (recovery-aware) status

Preflight showed the redial path downgrades the retained row to
unavailable in the same turn it marks recovery as reconnecting, so the
raw-status gate resigned the keyboard right as the title spinner
started. effectiveConnectionStatus reads reconnecting through that
window (and folds a failed recovery into unavailable), so the keyboard
now survives the blip.

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

* iOS: disconnected state moves into the title bar too

The terminal-covering Disconnected pill is gone. The title's indicator
slot turns red while disconnected, the subtitle line reads Disconnected
(the input gate blocks typing there, so the state explains itself), and
manual Reconnect moves into the title tap menu. Reauthentication keeps
its blocking banner, and background auto-reconnect is unchanged. The
now-unused status pill view and the detail's dead host parameter are
removed.

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

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
@teamleaderleo

Copy link
Copy Markdown
Collaborator

Closing as superseded: #10820 added PendingCursorShellApproval.encode(to:) and fixed the projectRoot redeclaration, and #10822 added the -> UUID? annotations.

The branch is kept; reopen if I've got this wrong. Part of the backlog cleanup in manaflow-ai/cmuxterm-hq#563.

@github-project-automation github-project-automation Bot moved this from Todo to Done in cmux backlog Sep 24, 2026
rajinsyed pushed a commit to rajinsyed/supermux that referenced this pull request Oct 3, 2026
… no connection-driven pops (#10821)

* iOS: fix main-red compile in MobileWorkspaceAggregation

Same fix as manaflow-ai/cmux#10813 (identical hunk,
merges clean); carried here so this branch's packages build.

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

* iOS: quiet reconnecting UX on the workspace detail screen

Reconnecting now surfaces as a mini spinner in the title bar's existing
indicator slot instead of the terminal-covering status pill; the pill
remains only for the unavailable state, where it still offers Reconnect.

The terminal stays fully interactive while a reconnect is in flight:
input blocking (and keyboard resignation) now trigger only on
unavailable or failed foreground recovery, and a send racing the dead
window fails visibly through the send-status pill.

Connection churn can no longer push the user out of the workspace
detail screen. WorkspaceAbsenceAuthority decides whether a workspace's
absence from a freshly derived list is authoritative (deleted, closed,
unpaired - selection retargets and the detail pops as before) or a
transient hole from a degraded connection (selection holds and the
detail keeps rendering its last-known snapshot). The held-selection
window also stops the selectedWorkspace first-row fallback from
clobbering the terminal selection or mispairing input ids.

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

* cli: fix main-red Encodable synthesis for PendingCursorShellApproval

Same fix as manaflow-ai/cmux#10808 (encode(to:)
hunk only); carried here so this branch's Mac build compiles.

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

* iOS: fix second main-red from #10662 (fileprivate groupActionCapabilities)

Same hunk as manaflow-ai/cmux#10813; the +Actions
file in the same target calls it, so archive fails on main.

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

* iOS: gate terminal input on the effective (recovery-aware) status

Preflight showed the redial path downgrades the retained row to
unavailable in the same turn it marks recovery as reconnecting, so the
raw-status gate resigned the keyboard right as the title spinner
started. effectiveConnectionStatus reads reconnecting through that
window (and folds a failed recovery into unavailable), so the keyboard
now survives the blip.

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

* iOS: disconnected state moves into the title bar too

The terminal-covering Disconnected pill is gone. The title's indicator
slot turns red while disconnected, the subtitle line reads Disconnected
(the input gate blocks typing there, so the state explains itself), and
manual Reconnect moves into the title tap menu. Reauthentication keeps
its blocking banner, and background auto-reconnect is unchanged. The
now-unused status pill view and the detail's dead host parameter are
removed.

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

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants