Skip to content

fix(wework): use task model for friendly titles - #2489

Merged
qdaxb merged 5 commits into
mainfrom
fix/friendly-task-title-model
Aug 7, 2026
Merged

fix(wework): use task model for friendly titles#2489
qdaxb merged 5 commits into
mainfrom
fix/friendly-task-title-model

Conversation

@qdaxb

@qdaxb qdaxb commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Keep friendly task titles disabled by default.
  • Replace the empty title-model choice with Same as task and require an effective model when enabling the feature.
  • Reuse the task's resolved execution model when Same as task is selected.
  • Document the setting in Chinese and English.

Why

The previous empty selection could disable the feature silently and could not express the expected behavior of generating titles with the task's own model.

User impact

Users can enable friendly titles with a clear default model choice. Selecting a dedicated title model still affects only title generation, not the task model.

Validation

  • pnpm --filter wework exec vitest run src/components/settings/GeneralSettingsPage.test.tsx src/features/workbench/useWorkbenchRuntimeMessaging.test.ts
  • pnpm --filter wework exec prettier --check ...
  • pnpm --filter wework exec eslint ...
  • Pre-push: ESLint, TypeScript, and the Wework unit test suite passed.

Summary by CodeRabbit

  • New Features

    • Added settings to enable friendly task titles and choose the task’s model or a specific model.
    • Friendly titles are generated asynchronously and fall back safely when a selected model is unavailable.
    • Task creation continues normally if title generation fails or the task is ephemeral.
    • Improved recognition of saved custom models across model selection and task execution.
    • Added English and Simplified Chinese localization for the new settings.
  • Bug Fixes

    • Preserved pending goals when runtime goal information is temporarily unavailable.
  • Documentation

    • Updated user guides with friendly-title configuration and fallback behavior.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The change adds friendly task title settings, supports task-model and explicit-model selection, validates unavailable models, integrates title configuration into runtime task creation, expands model identifier resolution, improves desktop model selection, preserves seeded goals during hydration, and updates English and Chinese documentation.

Changes

Friendly task titles

Layer / File(s) Summary
Friendly-title settings configuration
wework/src/components/settings/GeneralSettingsPage.tsx, wework/src/components/settings/GeneralSettingsPage.test.tsx, wework/src/i18n/locales/*.json
The settings page supports task-model selection, explicit model validation, unavailable saved models, preference persistence, and localized labels.
Runtime friendly-title selection
wework/src/features/workbench/useWorkbenchRuntimeMessaging.ts, wework/src/features/workbench/useWorkbenchRuntimeMessaging.test.ts
friendlyTitleForTask handles disabled, ephemeral, unavailable-model, configured-model, and execution-model fallback cases. Runtime task creation uses its result.
Model identifier resolution
wework/src/features/model-settings/localModelSettings.ts, wework/src/features/model-settings/localModelSettings.test.ts, wework/src/api/local/localServices.test.ts
Local model lookup accepts catalog identifiers and slugs. Local service tests use generated catalog identifiers.
Desktop model selection compatibility
wework/e2e/desktop/task-flow.e2e.mjs
Fixtures and selection helpers support multiple model IDs and labels across provider-switch, recovery, matrix, and model-switch flows.
Runtime goal hydration fallback
wework/src/components/layout/useWorkbenchPaneSession.ts, wework/src/features/workbench/WorkbenchProvider.test.tsx
Goal hydration preserves the seeded goal when the server returns no goal and updates the lifecycle status from the resolved goal.
Friendly-title documentation
docs/en/wegent/user-guide/coding/managing-code-tasks.md, docs/zh/wegent/user-guide/coding/managing-code-tasks.md
The guides describe enabling friendly titles, selecting a model, asynchronous generation, and fallback behavior.

Estimated code review effort: 3 (Moderate) | ~30 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant GeneralSettingsPage
  participant AppPreferences
  participant WorkbenchRuntimeMessaging
  participant friendlyTitleForTask
  User->>GeneralSettingsPage: Enable friendly titles and select a model
  GeneralSettingsPage->>AppPreferences: Persist friendly-title preferences
  WorkbenchRuntimeMessaging->>friendlyTitleForTask: Evaluate preferences and available models
  friendlyTitleForTask->>WorkbenchRuntimeMessaging: Return title configuration or null
  WorkbenchRuntimeMessaging->>WorkbenchRuntimeMessaging: Create runtime task with optional title configuration
Loading

Possibly related PRs

Suggested reviewers: icycrystal4

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the primary change: using the task model for friendly task titles.
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.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/friendly-task-title-model

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.

@qdaxb
qdaxb marked this pull request as ready for review August 7, 2026 09:21
@qdaxb
qdaxb enabled auto-merge August 7, 2026 09:21

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
wework/src/components/settings/GeneralSettingsPage.tsx (1)

451-479: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Increase the mobile selector height.

Line 461 sets the new <select> control to h-8, or 32px. This is below the required 44px mobile touch target.

Proposed fix
- className="h-8 w-full rounded-md border border-border bg-background px-2 text-sm text-text-primary md:w-[220px]"
+ className="h-8 w-full rounded-md border border-border bg-background px-2 text-sm text-text-primary max-sm:h-11 md:w-[220px]"

As per coding guidelines, “Mobile controls must be at least 44px × 44px.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@wework/src/components/settings/GeneralSettingsPage.tsx` around lines 451 -
479, Increase the height of the select control in the friendly task title model
selector identified by data-testid="friendly-task-title-model-select" from h-8
to a minimum 44px mobile height, while preserving the existing responsive
styling and behavior.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@wework/src/components/settings/GeneralSettingsPage.tsx`:
- Around line 451-479: Increase the height of the select control in the friendly
task title model selector identified by
data-testid="friendly-task-title-model-select" from h-8 to a minimum 44px mobile
height, while preserving the existing responsive styling and behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 16c85694-6854-4784-b072-4ca397e87b1a

📥 Commits

Reviewing files that changed from the base of the PR and between 6a20dfe and 8c616f4.

📒 Files selected for processing (8)
  • docs/en/wegent/user-guide/coding/managing-code-tasks.md
  • docs/zh/wegent/user-guide/coding/managing-code-tasks.md
  • wework/src/components/settings/GeneralSettingsPage.test.tsx
  • wework/src/components/settings/GeneralSettingsPage.tsx
  • wework/src/features/workbench/useWorkbenchRuntimeMessaging.test.ts
  • wework/src/features/workbench/useWorkbenchRuntimeMessaging.ts
  • wework/src/i18n/locales/en/common.json
  • wework/src/i18n/locales/zh-CN/common.json

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
wework/src/api/local/localServices.test.ts (1)

1108-1126: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Assert each generated catalog ID before reusing it.

codexCatalogModelId is optional on LocalModelConfig. If ID generation regresses, the request payloads and expected selections can use undefined. The test can then pass without proving custom catalog routing.

Assert that the ollama, lmstudio, and custom IDs exist after saving. Reuse narrowed string values in the later requests and assertions.

Based on the supplied LocalModelConfig interface, these fixtures need an explicit catalog-ID contract check.

Also applies to: 1149-1176, 1192-1194

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@wework/src/api/local/localServices.test.ts` around lines 1108 - 1126, After
saving the ollama, lmstudio, and custom fixtures, assert each config’s
codexCatalogModelId is defined before constructing later requests or expected
selections. Reuse the narrowed catalog ID values throughout those payloads and
assertions so the test explicitly validates catalog routing and never relies on
undefined IDs.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@wework/src/features/model-settings/localModelSettings.ts`:
- Around line 625-631: Update the resolver around readStoredConfigs in
wework/src/features/model-settings/localModelSettings.ts: return null before the
fallback lookup when modelName is null or undefined, preventing optional
identifiers from matching unrelated configurations. In
wework/src/features/model-settings/localModelSettings.test.ts, assert
model.codexCatalogModelId is non-empty before lookup, add a regression fixture
without catalog metadata, and add a slug-only fixture to cover the
catalogEntry.slug branch.

---

Nitpick comments:
In `@wework/src/api/local/localServices.test.ts`:
- Around line 1108-1126: After saving the ollama, lmstudio, and custom fixtures,
assert each config’s codexCatalogModelId is defined before constructing later
requests or expected selections. Reuse the narrowed catalog ID values throughout
those payloads and assertions so the test explicitly validates catalog routing
and never relies on undefined IDs.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 71a0fa68-b3aa-4ef4-8326-3b7647340e60

📥 Commits

Reviewing files that changed from the base of the PR and between 8c616f4 and 6a1b4cc.

📒 Files selected for processing (4)
  • wework/e2e/desktop/task-flow.e2e.mjs
  • wework/src/api/local/localServices.test.ts
  • wework/src/features/model-settings/localModelSettings.test.ts
  • wework/src/features/model-settings/localModelSettings.ts

Comment thread wework/src/features/model-settings/localModelSettings.ts
@qdaxb
qdaxb force-pushed the fix/friendly-task-title-model branch from 6a1b4cc to 2457b10 Compare August 7, 2026 11:35
@qdaxb
qdaxb added this pull request to the merge queue Aug 7, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 7, 2026
@qdaxb
qdaxb added this pull request to the merge queue Aug 7, 2026
@qdaxb
qdaxb removed this pull request from the merge queue due to a manual request Aug 7, 2026
@qdaxb
qdaxb added this pull request to the merge queue Aug 7, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 7, 2026
@qdaxb
qdaxb added this pull request to the merge queue Aug 7, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 7, 2026
@qdaxb
qdaxb force-pushed the fix/friendly-task-title-model branch from 2457b10 to cb923b5 Compare August 7, 2026 14:05

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@wework/src/components/layout/useWorkbenchPaneSession.ts`:
- Around line 473-478: Update the Runtime goal hydration debug log in the
resolved hydration flow to use resolvedGoal?.status instead of
loadedGoal?.status, so the logged goal status matches the fallback-seeded value
stored and reported by the subsequent logic.
- Around line 472-480: Prevent the async hydration block around getRuntimeGoal
and setRuntimeConversationGoal from applying stale results after
clearCurrentGoal or updateCurrentGoalStatus mutates the goal. Track a per-goal
mutation generation (or equivalent request validity guard), verify it before
resolving and storing loadedGoal/seededGoal, and ignore responses from earlier
generations; add a regression test covering a clear or status update before the
deferred request resolves.

In `@wework/src/features/workbench/WorkbenchProvider.test.tsx`:
- Line 5010: Update the deferred response resolved by getRuntimeGoal in the
relevant test to include the required taskId field, using request.taskId from
runtimeWorkApi.createRuntimeTask.mock.calls[0][0] or the test’s expected task ID
value. Keep the accepted and goal fields unchanged.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d8262cde-4b58-456c-95a4-ec1a5db45050

📥 Commits

Reviewing files that changed from the base of the PR and between 2457b10 and 4e3f719.

📒 Files selected for processing (2)
  • wework/src/components/layout/useWorkbenchPaneSession.ts
  • wework/src/features/workbench/WorkbenchProvider.test.tsx

Comment on lines +472 to +480
const resolvedGoal = loadedGoal ?? seededGoal?.goal ?? null
if (import.meta.env.VITE_WEWORK_RUNTIME_DEBUG === '1') {
console.info('[Wework] Runtime goal hydration resolved', {
address: runtimeAddressDebug(runtimeTaskLoadTarget.address),
accepted: response.accepted,
goalStatus: loadedGoal?.status ?? null,
})
}
setRuntimeConversationGoal(runtimeTaskLoadTarget.address, loadedGoal)
setRuntimeConversationGoal(runtimeTaskLoadTarget.address, resolvedGoal)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n -C 6 \
  'getRuntimeGoal|setRuntimeConversationGoal|clearRuntimeGoal|clearCurrentGoal|updateCurrentGoalStatus|clearRuntimePaneGoalSeed' \
  wework/src/components/layout/useWorkbenchPaneSession.ts

Repository: wecode-ai/Wegent

Length of output: 9206


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== outline around hook state/mutations =="
ast-grep outline wework/src/components/layout/useWorkbenchPaneSession.ts \
  --match useWorkbenchPaneSession \
  --view expanded || true

echo "== goal/state declarations and imports =="
sed -n '1,145p' wework/src/components/layout/useWorkbenchPaneSession.ts
sed -n '340,512p' wework/src/components/layout/useWorkbenchPaneSession.ts
sed -n '2035,2160p' wework/src/components/layout/useWorkbenchPaneSession.ts
sed -n '2330,2365p' wework/src/components/layout/useWorkbenchPaneSession.ts

Repository: wecode-ai/Wegent

Length of output: 15799


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== runtimeConversationCache definitions for cache/lifecycle APIs =="
rg -n -C 8 'export .*setRuntimeConversationGoal|export .*updateRuntimeConversation|goalStatusReceived|clearRuntimeGoal|setRuntimeGoal|getRuntimeGoal|setRuntimeGoal|RuntimeConversationGoal|GoalStatus' wework/src/features/workbench wework/src  \
  -g '*runtimeConversationCache*' -g '*.ts' -g '*.tsx'

echo "== candidate cache file list =="
fd -i 'runtimeConversation|conversationCache|goal' wework/src | sed -n '1,80p'

Repository: wecode-ai/Wegent

Length of output: 50373


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== runtimeConversationCache main exports =="
fd -i 'runtimeConversationCache' wework/src
CACHE="$(fd -i 'runtimeConversationCache' wework/src | head -n 1)"
wc -l "$CACHE"
sed -n '1,240p' "$CACHE"

Repository: wecode-ai/Wegent

Length of output: 7405


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== local cache/store usages for currentRuntimeTask =="
rg -n -C 4 'setRuntimeConversationGoal|lifecycleStore\.goalStatusReceived|clearRuntimePaneGoalSeed|pendingRuntimeGoalState|getRuntimeConversationMetadata|setRuntimeConversationTaskPlan' wework/src/features/workbench/useWorkbenchRuntimeTasks.ts wework/src/features/workbench/runtimeTaskLifecycle wework/src/features/workbench/runtimeConversationCache* -g '*ts'

Repository: wecode-ai/Wegent

Length of output: 8087


Prevent stale hydrated goals from overriding later mutations.

clearCurrentGoal and updateCurrentGoalStatus can write null or a newer status while getRuntimeGoal is pending. If that deferred response then returns goal: null, resolvedGoal falls back to the earlier seededGoal and overwrites the cache/lifecycle store with old state. Track a goal-mutation generation or ignore stale hydration results before applying them. Add a regression test for clear or status change before the deferred request resolves.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@wework/src/components/layout/useWorkbenchPaneSession.ts` around lines 472 -
480, Prevent the async hydration block around getRuntimeGoal and
setRuntimeConversationGoal from applying stale results after clearCurrentGoal or
updateCurrentGoalStatus mutates the goal. Track a per-goal mutation generation
(or equivalent request validity guard), verify it before resolving and storing
loadedGoal/seededGoal, and ignore responses from earlier generations; add a
regression test covering a clear or status update before the deferred request
resolves.

Comment on lines 473 to 478
if (import.meta.env.VITE_WEWORK_RUNTIME_DEBUG === '1') {
console.info('[Wework] Runtime goal hydration resolved', {
address: runtimeAddressDebug(runtimeTaskLoadTarget.address),
accepted: response.accepted,
goalStatus: loadedGoal?.status ?? null,
})

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Log the resolved goal status.

When the API returns no goal and the seed supplies the fallback, Line 477 logs null even though Lines 480-483 store and report the seeded status. Change loadedGoal?.status to resolvedGoal?.status.

Proposed fix
-              goalStatus: loadedGoal?.status ?? null,
+              goalStatus: resolvedGoal?.status ?? null,
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if (import.meta.env.VITE_WEWORK_RUNTIME_DEBUG === '1') {
console.info('[Wework] Runtime goal hydration resolved', {
address: runtimeAddressDebug(runtimeTaskLoadTarget.address),
accepted: response.accepted,
goalStatus: loadedGoal?.status ?? null,
})
if (import.meta.env.VITE_WEWORK_RUNTIME_DEBUG === '1') {
console.info('[Wework] Runtime goal hydration resolved', {
address: runtimeAddressDebug(runtimeTaskLoadTarget.address),
accepted: response.accepted,
goalStatus: resolvedGoal?.status ?? null,
})
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@wework/src/components/layout/useWorkbenchPaneSession.ts` around lines 473 -
478, Update the Runtime goal hydration debug log in the resolved hydration flow
to use resolvedGoal?.status instead of loadedGoal?.status, so the logged goal
status matches the fallback-seeded value stored and reported by the subsequent
logic.

)
await waitFor(() => expect(runtimeWorkApi.getRuntimeGoal).toHaveBeenCalled())
await act(async () => {
getRuntimeGoal.resolve({ accepted: true, goal: null })

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🔴 Critical | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

sed -n '741,746p' wework/src/types/api.ts
sed -n '5008,5013p' wework/src/features/workbench/WorkbenchProvider.test.tsx

Repository: wecode-ai/Wegent

Length of output: 500


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the deferred mock setup and nearby createRuntimeTask response used in this test.
sed -n '4960,5016p' wework/src/features/workbench/WorkbenchProvider.test.tsx

# Programmatically inspect the surrounding test to identify the variable name passed by createRuntimeTask
# and whether the deferred resolve omits taskId.
python3 - <<'PY'
from pathlib import Path
p = Path('wework/src/features/workbench/WorkbenchProvider.test.tsx')
text = p.read_text()
target_start = text.find('getRuntimeGoal.resolve({ accepted: true, goal: null })')
print('target_resolve_start=', target_start)
context = text[max(0,target_start-900):min(len(text),target_start+120)]
print('CONTEXT:')
print(context)
print('contains_createRuntimeTask_call=', 'createRuntimeTask' in context)
print('contains_taskId_resolve=', 'taskId' in context)
PY

Repository: wecode-ai/Wegent

Length of output: 3487


Include the required taskId in the deferred response.

RuntimeGoalGetResponse requires taskId: string, but getRuntimeGoal.resolve({ accepted: true, goal: null }) omits it. Use request.taskId from runtimeWorkApi.createRuntimeTask.mock.calls[0][0], or add the expected task ID value if this test decouples the response.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@wework/src/features/workbench/WorkbenchProvider.test.tsx` at line 5010,
Update the deferred response resolved by getRuntimeGoal in the relevant test to
include the required taskId field, using request.taskId from
runtimeWorkApi.createRuntimeTask.mock.calls[0][0] or the test’s expected task ID
value. Keep the accepted and goal fields unchanged.

@qdaxb
qdaxb added this pull request to the merge queue Aug 7, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 7, 2026
@qdaxb
qdaxb added this pull request to the merge queue Aug 7, 2026
Merged via the queue into main with commit 5b91813 Aug 7, 2026
47 checks passed
@qdaxb
qdaxb deleted the fix/friendly-task-title-model branch August 7, 2026 15:12
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.

1 participant