Releases: ernestdefoe/mosaic
Release list
3.4.2 — audit hardening
Floxum audit hardening. Removed an unused RuntimeException import, locale-aware number formatting (dropped hardcoded en-US), and wired the sidebar card titles + quick-action labels through the translator. Two LOW findings (the app.routes wrapping and the openComposer DOM/rAF shim) are intentionally retained with documented rationale.
3.4.1
Added
- Hero nav: a pill for each Page Builder content type (e.g. Articles) now appears in the hero navigation, linking to its
/c/{slug}listing. Read from thepagebuilderContentTypesforum attribute, so it works automatically for any content type you define.
3.4.0
What's Changed
Adds blog post creation entry points and section navigation when linkrobins/blog is installed.
Added
- Blog nav pill in the hero pill-row (uses the admin-configured blog nav label/icon, falling back to "Blog" with a feather icon).
- "Write a Blog Post" in the Quick Actions sidebar panel — shown to members with permission to write posts.
- "Write a Post" button in the site header on
/blogroutes — gives authors a direct path to the compose editor on the blog's own pages, which use the blog extension's layout rather than the forum index. - Section nav pills ("Discussions" / "Blog") above the blog index and category pages, so the blog feels like a first-class section — useful if you set the blog as your landing page.
All entry points are permission-gated (canCreateBlogPost) and only appear when the blog extension is present.
Fixed
- A blank-page crash when navigating to the blog via the in-app nav pill. The blog-page nav wrapper now keys its fragment consistently, resolving a Mithril "vnodes must either all have keys or none have keys" error that only triggered on client-side route transitions.
3.3.0
What's Changed
Two visual fixes in the discussion list and the sidebar contributor panel.
Fixed
- Top Contributors avatars — the panel now shows actual user profile photos when members have uploaded an avatar. Previously a PHP method-call bug (
$u->avatarUrl()rather than$u->avatar_url) silently returned null for every user, falling back to colour-coded initials every time. - Tag pills beside the discussion title — tag chips now appear on the same line as the discussion title rather than in a separate full-width row below it. Uses
display: contentson the info<ul>to promote tag<li>elements into the title row's flex context, with an invisible row-break sentinel pushing metadata (poster, time) to the next row.
3.2.0
What's Changed
A code-audit release — the contributor/trending panels now work forum-wide, plus internal robustness fixes.
Fixed
- Top Contributors and Trending panels show real forum-wide data. They previously ranked only the handful of records the current page had loaded (≈20 discussions, often 0 users), so they were usually empty or unrepresentative — and the admin "top contributors" path never worked because its data was never sent to the frontend. Both are now computed and cached server-side and sent as forum attributes. Trending is computed against guest visibility, so it never surfaces a discussion a guest couldn't already see.
- Marketplace promo + hero stat labels are translatable. They were hardcoded English; they now route through the locale file so translators' overrides take effect.
Internal
- The forum-payload fields are built by a container-injected class instead of manual service resolution.
- Resolved-ticket counting uses a small Eloquent read-model rather than a borrowed raw database connection.
- The hero pill-row no longer instantiates a core component out of its lifecycle to read its nav items; it builds its own row.
- Removed an unused duplicate component and de-duplicated the composer-open helper into a single utility.
3.1.0
What's Changed
A code-audit release — the hero stats are now accurate, plus internal robustness and type-safety fixes.
Fixed
- Accurate hero counts. The "Discussions" and "Posts" tiles previously fell back to counting only the discussions loaded on the current page — so every visitor saw a small, misleading number (e.g. "20 Discussions"). They're now backed by real, cached forum-wide totals computed server-side.
- Dead "extra nav links" branch removed. A header-nav feature that was never wired to any setting or admin control has been removed.
- Fallback category tiles now navigate. On a fresh install without
flarum/tags, the six placeholder category tiles linked to#and did nothing; they now go to the discussion index.
Internal
- The statistics service no longer depends on a low-level database connection interface, and the support-extension table probe is now resolved through Flarum's own model connection (the
DB/Schemafacades aren't usable in Flarum). - The shared
translate()helper, previously copy-pasted into three components, is now a single utility. - Every frontend component is fully TypeScript type-checked — the
@ts-nocheckescape hatches are gone, so attribute typos are caught at compile time.
3.0.0
What's Changed
- ci: auto-post releases to Flarum support site + draft release notes
- ci: drop publish-to-flarum workflow
- ci: restore publish-to-flarum workflow
- Build changelog from commits when release body is a placeholder
- Replace release-drafter with commit-based draft-release workflow
- Add workflow_dispatch trigger to publish-to-flarum.yml
- Convert to TypeScript (audit fix)
- docs: add Floxum marketplace badges to README
- feat(less): move tags under the discussion title
Full Changelog: 2.1.24...3.0.0
2.1.24
Hero: hide Tickets-resolved tile when support extension isn't install…
2.1.23
Remove MosaicMobileSession floating top-right pill The body-mounted Mithril root rendered an avatar (or "Log In" pill for guests) at the top-right of the phone viewport, escaping the #drawer.App-drawer transform trap. The guest pill was reading as a grayed-out / non-interactive label rather than an actionable button, and duplicated the session affordance that already lives in the hamburger drawer. Mobile session controls now use Flarum 2's intended pattern: tap the hamburger to access Log In / Sign Up / Notifications / user dropdown inside the drawer. Deletes: - js/src/forum/components/MobileSessionAvatar.js - Mount logic in forum/index.js - .MosaicMobileSession / .MosaicMobileSession-trigger / .MosaicMobileSession-loginLabel rules in less/header.less Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.1.22
Polish guest login/signup buttons + harden TagDiscussionModal on mobile - HeaderSecondary's logIn / signUp items get a paired pill treatment: Sign Up is the primary CTA (filled primary), Log In is a ghost pill that defers to it. Scoped to .Header-controls so the LogInButtons inside the modal keep stock styling. - TagDiscussionModal: nail down surface bg + z-index above composer + reclaim phone top padding so the search input lands at the top of the viewport (was being eaten by header-height-phone). Tag tiles get a 44px min-height for proper touch targets on phone. Note: this does not replace the modal with an inline dropdown — that's a separate, larger change (override flarum/tags' chooseTags hook). Mosaic continues to use stock Flarum tag selection behavior. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>