publish: upload local files referenced by links, not just images
还没有人认领这个 Issue。
评估
调研方向
从 images.go:78 的正向附件注册开始,然后阅读 attachname.go 和共享的 withinRoot clamp。将链接处理与 renderImage 进行比较,并检查 docs/confluence/links-and-anchors.md 中的映射。完成标准是:符合条件的本地非 .md 链接目标能够正确上传并重写,同时 .md 链接保留现有的页面 URL 行为,并通过 sourceFor 更新反向的 ri:attachment 渲染。
由索引模型根据 Issue 内容生成。
描述
read/export now pass an attachment link through as raw storage rather than converting it, because a markdown link to the exported file would break on the next publish. From the mapping table in links-and-anchors.md:
| storage | markdown | why |
|---|---|---|
ri:attachment |
passthrough | only images are uploaded, so [x](Deck.ppt) would publish as a dead relative href |
So this exports:
Grab <ac:link><ri:attachment ri:filename="Deck.ppt" /><ac:plain-text-link-body>the deck</ac:plain-text-link-body></ac:link>.
where Grab [the deck](Deck.ppt). would read better, preview locally, and reference the file export already downloads (it scans raw storage for ri:filename, not just ac:image, precisely so a link target is included).
What blocks it is the forward path, not the inverse one. Only images.go:78 registers an Attachment, so a local file named by a link destination is never uploaded, and republishing [the deck](Deck.ppt) emits <a href="Deck.ppt"> — a relative href that resolves to nothing on Confluence, with no warning and exit 0. That is the silent failure mode docs/confluence/links-and-anchors.md already calls out for unresolved doc links, and it is worse here because the link was working before the round trip.
The work is therefore in the forward direction first: treat a link destination that names a local non-.md file the way an image src is treated — resolve it page-relative, clamp it to the documentation root, register it as an attachment, and rewrite the href to the attachment. attachname.go's source-path↔attachment-name codec and the withinRoot clamp both already exist and are shared with images; what is missing is a link-side caller. Once a link target uploads, flip ri:attachment in the inverse mapping from passthrough to [body](path) via sourceFor, exactly as renderImage does.
Two things to decide when picking this up. Whether a link to a local file should upload it at all, or only when some marker says so — an unqualified rule means any [x](notes.txt) in a repo starts publishing that file as an attachment, which may be more than anyone asked for. And what .md siblings do, which must keep resolving to page URLs via the existing doc-link path rather than becoming attachments.
Split out of #88, where the passthrough decision was made.
- 主要语言
- Go
- 星标
- 2
- 派生
- 0
- 平均合并
- 2 小时 50 分钟
- 30 天内合并 PR
- 52
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
mozilla/markfluence 的其他 Issue
-
难度 4/5 3-5 天 新手友好度 55/100
mozilla/markfluence#186 ·
-
难度 5/5 一周以上 新手友好度 35/100
mozilla/markfluence#185 ·
-
难度 5/5 一周以上 新手友好度 35/100
mozilla/markfluence#184 ·
-
bug
难度 3/5 1-2 天 新手友好度 55/100
mozilla/markfluence#181 · 1 条评论 ·
-
bug
难度 5/5 一周以上 新手友好度 48/100
mozilla/markfluence#163 ·
查看 mozilla/markfluence 的全部 Issue
相似的 Issue
-
agentic-workflows
难度 2/5 1-3 小时 新手友好度 76/100
-
agentic-workflows
难度 2/5 1-3 小时 新手友好度 70/100
microsoft/agent-framework-go#1179 ·
-
bug
难度 2/5 1-3 小时 新手友好度 76/100
-
[Bug]: OLLAMA_KEEP_ALIVE="5m" / "24h" crashes Ollama embedding and vision models with ValueError 未关闭
难度 2/5 1-3 小时 新手友好度 75/100
infiniflow/ragflow#20223 · 1 个 reaction ·
-
bug needs triage pkg/translator/faro
难度 2/5 1-3 小时 新手友好度 88/100
open-telemetry/opentelemetry-collector-contrib#51484 · 1 条评论 ·