Context
PR #601 fixed the primary live-ingress bug (non-image Slack attachments being silently dropped), but we intentionally deferred several follow-ups that are still worth landing to close correctness and hardening gaps.
Why this issue
Live Slack ingress is now attachment-aware, but historical thread hydration and a few robustness items remain inconsistent with the intended contract.
Follow-up tasks
Acceptance criteria
- Historical backfill no longer silently omits non-image attachments.
- No raw exception internals are sent to Slack users from attachment ingest failures.
- Attachment announcement lines remain single-line and parse-safe even with hostile filename metadata.
- New tests cover the above cases and pass in CI.
Related
Context
PR #601 fixed the primary live-ingress bug (non-image Slack attachments being silently dropped), but we intentionally deferred several follow-ups that are still worth landing to close correctness and hardening gaps.
Why this issue
Live Slack ingress is now attachment-aware, but historical thread hydration and a few robustness items remain inconsistent with the intended contract.
Follow-up tasks
src/Netclaw.Channels.Slack/SlackThreadHistoryFetcher.csso historical thread hydration no longer hard-filters toimage/*only.SlackThreadHistoryFetcher.cs:146.src/Netclaw.Channels.Slack/SlackThreadBindingActor.cs, avoid exposing rawex.Messagein channel replies on download/scan/write failures.[attachment]line construction to normalize control characters/newlines in metadata before emitting text.EscapeQuoted) handles quotes/backslashes only.feeds/skills/.system/files/netclaw-operations/SKILL.mdguidance to match inbox + attachment-line behavior.Acceptance criteria
Related