Skip to content

Surface mod-level changelog in mod details (CLI + TUI) #87

Description

@dyoung522

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:clicmd/lmm - commands, flags, output formattingarea:sourcesinternal/source - NexusMods, CurseForge, custom sourcesarea:tuiinternal/tui - screens, keys, renderingenhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions