Skip to content

v0.5.0

Choose a tag to compare

@milmazz milmazz released this 10 May 04:33
· 8 commits to main since this release
ed1e009

Added

  • Exoplanet.Filters now accepts allow_categories: :all and
    block_categories: :none to express "no constraint" explicitly.
    Lists keep working unchanged; atoms are normalized to [] internally
    by both Exoplanet.Filters.merge/2 and
    Exoplanet.Config.from_file/1, so the struct's default_filters
    field is always in canonical list form. Invalid atoms
    (allow_categories: :none, block_categories: :all, or any
    unrecognized atom) raise ArgumentError at config-load / merge time.
    The Exoplanet.Filters.t() typespec is widened accordingly.

Fixed

  • Exoplanet.build/1 now sorts each feed's entries by published
    (descending) before applying the per-feed new_feed_items cap.
    Previously the first N entries in document order were kept, so feeds
    that don't list newest-first (some Bridgetown / Jekyll templates,
    podcast feeds) had genuinely recent posts dropped before the global
    merge.
  • The feed parser now trims trailing , / ; and surrounding
    whitespace from feed categories at extraction time. Some Atom feeds
    emit terms like otp, (apparent producer-side templating bug) which
    silently failed Exoplanet.Filters.passes_allowlist? against the
    canonical otp allow-list entry, dropping the post.
  • The Atom parser now derives Exoplanet.Post.id from the entry's
    <link rel="alternate"> (or any <link> without a rel, per
    RFC 4287 §4.2.7.2) before falling back to <id>. Bridgetown-style
    feeds emit <id>repo://posts.collection/_posts/...md</id> and the
    canonical web URL only lives in <link rel="alternate">; consumers
    were rendering the repo:// URN as a clickable link.