Commit graph

686 commits

Author SHA1 Message Date
72853b2779
Bump version: 1.3.4 → 1.3.5
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.3.5
2026-04-09 03:49:50 +02:00
0e79f90843
fix(activitypub): Drop cached URLs without scheme
- Validate cached file/reply URLs start with http(s) and regenerate if stale
- Add tests for scheme-less cache entries
- Update changelog for 1.3.5 fix
2026-04-09 03:49:25 +02:00
b73c1d5a97
Bump version: 1.3.3 → 1.3.4
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.3.4
2026-04-09 03:33:42 +02:00
7950569f5a
fix: Suppress outgoing Webmentions for non-public visibility
All checks were successful
continuous-integration/drone/push Build is passing
- Skip outgoing webmentions for posts with visibility: direct,
  followers, or draft (previously only AP federation respected
  visibility)
- Extract parse_metadata_header into madblog.markdown to
  deduplicate metadata parsing across webmentions, tags, and
  activitypub modules
2026-04-09 03:12:22 +02:00
81ff48508a
Bump version: 1.3.2 → 1.3.3
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.3.3
2026-04-07 01:26:44 +02:00
1ea163d8a1
fix(config): Normalize link URLs to include scheme
Add _normalize_url helper for link and activitypub_link
2026-04-07 01:26:24 +02:00
11275f9de9
Bump version: 1.3.1 → 1.3.2
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.3.2
2026-04-06 00:07:54 +02:00
f169f56fe6
feat: Use raw_object.url as alias for AP interaction threading
- Extract human-readable URL from metadata.raw_object when building
  thread nodes, allowing reply-to fields using short Mastodon URLs
  (e.g., /@user/ID) to match interactions stored with canonical AP URLs
- Add test for raw_object.url aliasing
2026-04-06 00:07:46 +02:00
9be771a727
Bump version: 1.3.0 → 1.3.1
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/tag Build is failing
v1.3.1
2026-04-05 02:18:00 +02:00
f96f13a0c5
fix(webmentions): Accept split-domain base URLs
Pass base_urls including activitypub_link to handler
2026-04-05 02:17:47 +02:00
c1cb99c529
fix: Fixed float->bool type coercion
All checks were successful
continuous-integration/drone/push Build is passing
2026-03-29 18:04:08 +02:00
8e6f4ea0b7
fix: s/NotImplemented/NotImplementedError/ 2026-03-29 18:00:49 +02:00
50a97d2ba1
chore(hashlib): Pass usedforsecurity=False for non-crypto hashes
Update md5/sha1 calls used for IDs, etags, cache keys, and filenames
2026-03-29 18:00:07 +02:00
41ba6e950b
style: Adjust reactions pill padding
All checks were successful
continuous-integration/drone/push Build is passing
2026-03-26 17:14:55 +01:00
c3278ff1cf
style: Add margin around author liked avatar
All checks were successful
continuous-integration/drone/push Build is passing
This overrides the inherited `0 auto` that would otherwise center the
avatar horizontally.
2026-03-26 17:12:44 +01:00
753f487a83
Bump version: 1.2.11 → 1.3.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.3.0
2026-03-26 03:17:47 +01:00
43da3e2cb9
docs(changelog): Updated CHANGELOG 2026-03-26 03:17:35 +01:00
34b19b200f
refactor(index): Drop AuthorReactionsIndex; use ReplyMetadataIndex for likes
All checks were successful
continuous-integration/drone/push Build is passing
- Remove AuthorReactionsIndex wiring from BlogApp and reactions module
- Add fediverse alias support to ReplyMetadataIndex.get_likes_for_target()
2026-03-26 03:15:34 +01:00
c3c9b6754f
feat(replies): Added index for for unlisted/AP reply metadata 2026-03-26 03:05:06 +01:00
079c73f80f
feat: add ReplyMetadataIndex for O(1) reply metadata lookups
- Add ReplyMetadataIndex class with JSON persistence and ContentMonitor
  integration for incremental updates
- Store per-file: reply_to, like_of, visibility, published, has_content,
  title
- Query methods: get_unlisted_slugs(), get_ap_reply_slugs(),
  get_article_reply_slugs(), get_likes_for_target()
- Migrate author_likes lookup from AuthorReactionsIndex to new index

Reference: #36
2026-03-26 02:32:11 +01:00
e7eb058017
feat(unlisted): Added Post+Replies tab
This mimics the most common Mastodon implementation:

- Posts: Only unlisted posts with no `reply-to`
- Posts and Replies: Unlisted posts + public/unlisted posts with
  `reply-to`
2026-03-26 01:23:43 +01:00
2f0681421e
Bump version: 1.2.10 → 1.2.11
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.2.11
2026-03-24 01:07:06 +01:00
b98c51655e
fix(markdown): Guard CodeHilite syntax highlighting failures
- Monkeypatch CodeHilite.hilite() to prevent page render aborts
- Log failures and fall back to escaped <pre><code> output
2026-03-24 01:06:28 +01:00
69289bb3a5
chore(codacy): Exclude tests from code analysis 2026-03-24 01:06:07 +01:00
b74e4d03fc
perf(markdown): Disable guess_lang in codehilite extension
The `guess_lang` flag can cause rendering of large chunks of Markdown to
fail with timeouts, causing a SIGABRT to bubble all the way up and kill
uWSGI workers.
2026-03-24 01:05:10 +01:00
c7aa567337
Bump version: 1.2.9 → 1.2.10
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.2.10
2026-03-24 00:10:26 +01:00
336347861d
docs(changelog): Updated CHANGELOG 2026-03-24 00:10:23 +01:00
497c70b93e
perf: defer monitor startup for gunicorn --preload support
- Move content monitor start from module-level to a before_request hook
  so threads are created after fork
- Add malloc arena and thread stack optimizations to the uwsgi entry
  point (matching cli.py)
- Enable --preload in Dockerfile and README examples
2026-03-24 00:07:36 +01:00
59dd06df07
docs(readme): Expand quickstart with config.yaml and docker run example 2026-03-24 00:05:40 +01:00
e03416a02b
Bump version: 1.2.8 → 1.2.9
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.2.9
2026-03-23 23:20:55 +01:00
da76f84e68
feat(nav): Add new_tab option for nav_links
Render target="_blank" + rel="noopener" only when nav_link.new_tab is true
2026-03-23 23:20:18 +01:00
328f4b2c4a
fix(activitypub): Thread root-level author replies through Fediverse intermediaries
All checks were successful
continuous-integration/drone/push Build is passing
Replace fixed two-pass descendant discovery with iterative loop (max 10)
to handle arbitrarily deep alternating author ↔ fediverse reply chains
2026-03-22 23:15:38 +01:00
00fd61de36
Bump version: 1.2.7 → 1.2.8
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.2.8
2026-03-22 22:42:49 +01:00
6dff07df01
fix(activitypub): Thread root-level author replies through Fediverse intermediaries
- _get_article_replies now accepts None article_slug to scan
  root-level replies as candidate descendants
- _add_interaction_urls now includes fediverse URL aliases
  (/@user/ID ↔ /users/user/statuses/ID) for parent matching
- Add regression tests for both fixes
2026-03-22 22:42:27 +01:00
e60cc1017a
Bump version: 1.2.6 → 1.2.7
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.2.7
2026-03-22 18:30:25 +01:00
5a31ae760e
refactor(nav): Reorder feed links after custom nav links
All checks were successful
continuous-integration/drone/push Build is passing
Keep Atom/RSS links at the bottom of `<nav>`
2026-03-22 17:06:22 +01:00
d324322f35
Bump version: 1.2.5 → 1.2.6
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.2.6
2026-03-22 17:02:09 +01:00
b601e8668c
docs(changelog): Bumped version 2026-03-22 17:01:56 +01:00
5a40f56df0
refactor(links): Split external_links into rel_me, external_links, and nav_links
- rel_me: links rendered as <link rel="me"> in <head> for identity
  verification (e.g., Mastodon), not displayed visually
- external_links: links displayed on /about page, now supports both
  URLs and objects with display_name/url fields
- nav_links: custom links in navigation panel with url, display_name,
  and icon (supports emoji or image URL)
2026-03-22 17:01:11 +01:00
4c6c868512
Bump version: 1.2.4 → 1.2.5
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.2.5
2026-03-22 16:06:19 +01:00
c1e4a0d786
docs(changelog): Bumped version 2026-03-22 16:06:07 +01:00
3b7387f587
feat(index): Add customizable default index page
- Add `default_index` config option (blog, about, tags, guestbook)
- Add /blog route to always serve blog index
- Add Blog link to navigation menu
- Update README, config.example.yaml, CHANGELOG
2026-03-22 16:05:43 +01:00
c125490e53
feat: Add optional About page with h-card microformat support
All checks were successful
continuous-integration/drone/push Build is passing
- Add /about route rendered from ABOUT.md in pages_dir
- Support h-card metadata: name, email, photo, job-title, org, key, rel-me
- Fall back to config values (author, author_url, etc.) when not provided
- Add hide_email config option to suppress email on public pages
- Conditionally show About link in nav when ABOUT.md exists
- Add AboutMixin, about.html template, and about.css styling

Closes: #35
2026-03-22 15:37:32 +01:00
2f0bf6a2f7
style(index): Removed background from .articles in full view mode
All checks were successful
continuous-integration/drone/push Build is passing
This caused some extra white/black padded space between articles.
2026-03-21 22:49:15 +01:00
9dec6fa00e
Bump version: 1.2.3 → 1.2.4
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.2.4
2026-03-20 22:35:30 +01:00
4e7cd31035
docs(changelog): Bumped version 2026-03-20 22:35:12 +01:00
5ce2d67c97
fix(activitypub): Ignore draft messages
This prevents null-pointer exceptions when _build_activitypub_object
returns null because the message is a draft.
2026-03-20 22:34:12 +01:00
e195fdf553
fix(markdown): Support both 2-space and 4-space nested list indentation
- Normalize 4-space list indents to 2-space outside fenced code blocks
- Render markdown with tab_length=2 for consistent nesting
- Add regression tests for nested lists and fenced code handling
- Adjust article list padding in blog CSS
2026-03-20 22:31:59 +01:00
b6304a480f
Bump version: 1.2.2 → 1.2.3
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.2.3
2026-03-20 20:40:28 +01:00
0ee05f1712
docs(changelog): Updated CHANGELOG 2026-03-20 20:40:23 +01:00