Description
The LINEAR_UPDATE_PROJECT action's description parameter (with max_length=255, plain text) was incorrectly named. Linear's GraphQL Project type has two body fields and the names don't match how Linear's UI labels them:
| Linear API field | Linear UI label | Constraint |
|---|
description | "Short summary" | plain text, ≤255 char |
content | (project body) | markdown, long-form |
So our tool's description was actually setting the short summary, while there was no way to update the actual project description (content / markdown body).
Changes (mercury/apps/linear/actions/update_project.py):
UpdateLinearProjectRequest
- Rename
description → short_summary (still max_length=255, maps to GraphQL description).
- Add new
description (no max length, markdown, maps to GraphQL content).
UpdatedProjectResponse
- Add
short_summary (Linear's description) and rename the description field to map to Linear's content.
execute() mutation_input now writes description from request.short_summary and content from request.description.
- GraphQL selection uses aliases (
short_summary: description, description: content) so the returned shape matches the new model.
- Class docstring + response field doc updated to reflect the split.
How did I test this PR
ruff check apps/linear/actions/update_project.py — passed.
ruff format --check apps/linear/actions/update_project.py — already formatted.
mypy apps/linear/actions/update_project.py — only the two pre-existing errors (timestamp = timestamp / 1000 and mutation_input["priority"] = ...) remain; both exist on master (verified via git stash + rerun) and are not introduced by this PR.
- Pydantic sanity check (constructed both new fields, confirmed
max_length=255 on short_summary still raises ValidationError):
Request fields: ['project_id', 'name', 'short_summary', 'description', 'state', 'start_date', 'target_date', 'lead_id', 'priority', 'color', 'icon', 'status_id']
Response fields: ['id', 'name', 'short_summary', 'description', 'state', 'url', 'slugId', 'priority', 'color', 'icon', 'startDate', 'targetDate', 'lead', 'teams']
short_summary: tagline
description: # Long markdown body
OK max_length: ValidationError
- E2E execution against Linear's GraphQL API was not runnable from the sandbox (no Linear test connection); recommend a Cortex test run before broad rollout to confirm
ProjectUpdateInput.content accepts markdown as expected.
⚠️ Behavior change for existing callers — anyone passing description to LINEAR_UPDATE_PROJECT today was actually setting Linear's short summary. After this PR, that argument writes the markdown content body instead. Callers who want to keep updating the short summary need to use short_summary.
Triggered by: palash@composio.dev | Source: slack
Session: https://zen-api-production-4c98.up.railway.app/dashboard/#/chat/zen-ca7a19117fa6