task +create/+update/+comment: description text silently disappears in the Feishu client (Markdown-parsed, failed spans are dropped) - the writer can never detect it
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 17.3k
- Forks
- 1.4k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 105
Description
Environment
- lark-cli 1.0.86, macOS, Feishu (China) tenant
- Commands:
task +create/task +update --description/task +comment(also rawtasks.patch)
Symptom
Task description and comment content look like plain-text fields but are rendered as Markdown in the Feishu client. Spans that parse as emphasis/HTML/headings/links are not degraded to plain text — the content inside is dropped entirely, and:
- the API accepts the write (no error),
- reading the task back via OpenAPI returns the original text unchanged,
- only the human viewing the client sees blank lines / missing words.
So the writer has zero feedback on any channel. Real incident: a QA-handoff task written with 15 **bold** spans — the reviewer's client showed five empty section titles and acceptance criteria reduced to a lone -, and the task was bounced back.
Reproduced rules (33 probe cases, description and comments behave identically)
- Paired
**/__/~~/***— always swallowed regardless of surroundings. Worst case: an unclosed**spanning lines eats everything up to the next**, including line breaks. - Single
*/_— swallowed only when the closing delimiter is followed by ASCII punctuation/whitespace/EOL (CJK punctuation does not trigger). This bites identifiers:slg_icon_<placeholder>renders asslg<placeholder>. <x>— swallowed only when<is followed by an ASCII letter,/or!(HTML-tag heuristic).- Line-leading
#headings — the whole line disappears (not "rendered as heading" — gone). [label] (url)with a space — write succeeds, client shows onlylabel, the parenthesized part vanishes (while the no-space form[label](url)with an invalid URL is at least loudly rejected with 1470400).
Note the inconsistency: IM message text content is not Markdown-parsed at all (verified safe), so users reasonably assume task text is plain too.
Why this matters for lark-cli specifically
This CLI is primarily driven by agents/scripts. An agent writing task descriptions cannot ever discover this failure — write OK, read-back OK, no error code. It only surfaces when a human complains about a blank task.
Ask (any of these would help)
- Document the behavior prominently in
task +create/+update/+commenthelp/skill docs. - Offer an opt-in
--escape-markdown(or a lint warning on risky spans) for description/comment writes. - Relay upstream to the Task team: failed Markdown spans should degrade to literal text instead of being dropped — silent data loss in a field the API round-trips verbatim is the real bug.
Happy to share the full 33-case probe matrix and repro script.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with task +create, task +update --description, task +comment, and raw tasks.patch; reproduce the 33 probe cases and compare write/read-back with Feishu rendering. Determine whether this repository can document the behavior, add lint or escaping, or relay it upstream. Done when the selected mitigation is explicit and reflected in the relevant help or skill documentation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- cli
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100