Problem
docs/PRD.md:32 requires "View mod details, descriptions, images, changelogs". Changelogs are only ever available in the update flow — a mod with no pending update has no changelog anywhere, in either interface.
(The separate PRD requirement at docs/PRD.md:148, "Display available updates with changelogs", is satisfied by both CLI and TUI.)
Evidence
Changelog is not on the mod type at all — internal/domain/mod.go:60-77 has no Changelog field. It lives only on domain.Update (mod.go:95-99, field at :98).
core.CleanChangelog (internal/core/changelog.go:28-40) has exactly three callers, all update-flow:
cmd/lmm/update.go:224 — the Changelogs: block in the update-check listing
cmd/lmm/update.go:305 — the Changelog: block in applySingleUpdate
internal/tui/service_core.go:1310 — inside coreProvider.CheckUpdates, populating UpdateItem.Changelog
The v1.14.0 v viewer improved reachability within that flow but did not change its scope — it is modal-scoped (internal/tui/actions.go:471-508, requires m.pendingUpdates != nil) or reads the retained check result (internal/tui/mutations.go:258-286, which prints "no update info — check updates (u) first" at :271 when none has run).
Meanwhile lmm mod show prints no changelog (cmd/lmm/mod.go:426-450) and lmm search is a 5-column table (cmd/lmm/search.go:228-256).
Source-side constraint
On NexusMods, changelog_html is a file field (internal/source/nexusmods/types.go:46, on FileData) read only inside CheckUpdates (nexusmods.go:278-292) — so a mod-level changelog means fetching the current/latest file's changelog, not a mod endpoint. CurseForge hardcodes it empty (curseforge.go:279) and would need its own changelog endpoint wired up, or to degrade gracefully.
That per-source variation argues for a capability-gated approach, consistent with how the custom-sources framework already gates features.
Proposal
- Add changelog retrieval to the detail path (mod-level, current version), capability-gated per source
- Surface it in CLI
lmm mod show and in the TUI mod-details view, reusing CleanChangelog for both per the parity directive
- Degrade to a clear "changelog not available from this source" rather than an empty section
Depends on
The TUI mod-details view (tracked separately) — the TUI half of this has nowhere to render until that exists.
Problem
docs/PRD.md:32requires "View mod details, descriptions, images, changelogs". Changelogs are only ever available in the update flow — a mod with no pending update has no changelog anywhere, in either interface.(The separate PRD requirement at
docs/PRD.md:148, "Display available updates with changelogs", is satisfied by both CLI and TUI.)Evidence
Changelog is not on the mod type at all —
internal/domain/mod.go:60-77has noChangelogfield. It lives only ondomain.Update(mod.go:95-99, field at:98).core.CleanChangelog(internal/core/changelog.go:28-40) has exactly three callers, all update-flow:cmd/lmm/update.go:224— theChangelogs:block in the update-check listingcmd/lmm/update.go:305— theChangelog:block inapplySingleUpdateinternal/tui/service_core.go:1310— insidecoreProvider.CheckUpdates, populatingUpdateItem.ChangelogThe v1.14.0
vviewer improved reachability within that flow but did not change its scope — it is modal-scoped (internal/tui/actions.go:471-508, requiresm.pendingUpdates != nil) or reads the retained check result (internal/tui/mutations.go:258-286, which prints "no update info — check updates (u) first" at:271when none has run).Meanwhile
lmm mod showprints no changelog (cmd/lmm/mod.go:426-450) andlmm searchis a 5-column table (cmd/lmm/search.go:228-256).Source-side constraint
On NexusMods,
changelog_htmlis a file field (internal/source/nexusmods/types.go:46, onFileData) read only insideCheckUpdates(nexusmods.go:278-292) — so a mod-level changelog means fetching the current/latest file's changelog, not a mod endpoint. CurseForge hardcodes it empty (curseforge.go:279) and would need its own changelog endpoint wired up, or to degrade gracefully.That per-source variation argues for a capability-gated approach, consistent with how the custom-sources framework already gates features.
Proposal
lmm mod showand in the TUI mod-details view, reusingCleanChangelogfor both per the parity directiveDepends on
The TUI mod-details view (tracked separately) — the TUI half of this has nowhere to render until that exists.