pkg_artigen changelog
Notable releases and milestones for Article Generator (pkg_artigen).
| Version | Summary |
|---|---|
| 3.5.25 (production) | shared-host resilience, un-branded banner markup, Status stepper polish. Browser-driven tick pipeline (3.5.23) — a long-standing “Background worker disappeared” failure on shared hosting is gone. pipelinekickoff no longer runs the whole pipeline behind fastcgi_finish_request; instead it marks pipeline_state='running' and returns. The browser drives generation by POSTing pipelinetick in a loop — each tick runs ONE step and returns within 90s, so no host kill condition (FPM request_terminate_timeout, MySQL wait_timeout, upstream proxy idle kill, OOM ceiling) can swallow a stage silently. The draft phase is decomposed into 1 outline tick + N section ticks + 1 assemble tick; section count derives from target word count (~250 words per section, capped at [3..8]) so a 1000-word article runs as 4 section ticks of ~15–30s each. The outline tick asks the AI for strict JSON [{title, key_points[]}] persisted to a new pipeline_outline column; each section tick writes one section’s HTML body to pipeline_sections keyed by index. Assemble combines them in order and runs the existing post-process (citation, markdown sanitiser, image weave, alt-text fill). Research and article phases remain mega-ticks for now (decomposition is the 3.5.26+ follow-up). Watchdog flags any single step stuck >90s; transient failures auto-retry up to 3 times with back-off before escalating to a hard fail; new pipelinecancel endpoint sets state='cancelled' and takes effect at the next tick boundary. Three new columns (pipeline_outline, pipeline_sections, pipeline_retry_count) + pipeline_state enum widened to include cancelled; script.php postflight ensureTickPipelineColumns() handles upgrades cleanly. Un-branded banner markup (3.5.24) — the inline-banner emit no longer carries class="artigen-banner-inline" (an easy “tell” that the article came from this component). Replaced with the same vanilla Bootstrap <figure> shape the curated images use; idempotency / regenerate detection now matches the deterministic banner filename in the <img src> instead of the brand class, and the legacy <p class="artigen-banner-inline"> pattern is matched and replaced too so old articles auto-clean on next regenerate. Status stepper polish (3.5.25) — “Brief Created” no longer renders as done on a fresh edit form (only ticks once the brief has been saved at least once); labels now centre vertically against their dots via flex layout; bottom padding doubled so there’s one extra connector-bar’s worth of room between steps. |
| 3.5.20–3.5.22 | Curated image distribution + full-width, excluded source domains, AI-aware progress labels, paste-to-row UX, banner-icon column. Curated images (3.5.20) — figures forced to full column width (Bootstrap .figure’s default inline-block clipped the figcaption to whatever intrinsic width the <img> had — often half the column when source images were small); distribution formula changed to floor((i + 0.5) × headingCount / imageCount) so two images on a 6-heading article land after H#2 and H#5 (evenly spread) instead of clustering near the top. Excluded source domains (3.5.20–3.5.21) — new Options → Content Defaults → Excluded source domains textarea (one host per line) applies a global blocklist to every search result BEFORE the fetch/summarisation loop runs, so paywalled / low-quality / opt-out sources never enter research or citations. Schemes + paths stripped if admin pastes full URLs, www. dropped, sub-domains matched, comments start with #. Progress labels (3.5.20–3.5.22) — validation-phase server waypoints added (load_brief, tier_check, search_prep) so the validate label doesn’t sit on screen for the entire search step; client-side initial label changed from Validating brief… (a guess) to Communicating with ChatGPT… / Communicating with Claude… resolved from the configured AI provider; kickoff response simplified to Pipeline started; draft waypoint rewritten from Generating article draft with AI (the slow step)… to Drafting article body — this is the slowest step (the old wording read as if the article was being generated when in fact the step could time out and produce nothing). Curated paste-to-row (3.5.21) — new “Add row from paste” button under the paste textarea posts to a new prompt.curatedparse endpoint, returns the parsed fields as JSON, and JS triggers the subform’s Add button + populates the new row. The row stays unsaved until the toolbar Save / Apply is clicked — standard Joomla “edit until you commit” pattern. Server-side parse-on-save still runs as a fallback for JS-off / forgot-to-click paths. Banner icon column (3.5.21) — the Banner column on the Article Briefs list now renders the actual FA glyph the banner generator will use (e.g. the newspaper icon if that’s what’s set), larger and primary-tinted, with a Banner icon: <name> tooltip. Defensive a-z/0-9/- strip on the class fragment. Themer header gradient fix (3.5.7, sibling release) — ThemerCompilerService header-gradient CSS was emitting only .container-header, header.container-header (both require the container-header class which Cassiopeia has but many custom child templates don’t); broadened to header, .header, .container-header, body > header mirroring the footer set. Preset library overhauled to mirror artigen’s BannerthemeField — Gradient themes (Maroon/Blue/Green/Slate/Purple/Teal/Orange/Windows 95) + Computing classics (Blissful/Bondi/Terminal Green/Amber CRT/Tangerine/Graphite/Synthwave/Blueprint) replacing the ad-hoc list including a vendor-named “Multizone” entry. |
| 3.5.19 | Curated CC images, Article Integrity, SEO at generation time, async pipeline, markdown sanitizer, h3 default, dashboard polish. Curated images (3.5.13–3.5.16) — per-brief subform under a new top-level Images tab takes Creative Commons images with a CC licence picker (CC0, BY, BY-SA, BY-NC, BY-ND, BY-NC-SA, BY-NC-ND, plus 3.0/2.0 variants and Public Domain). Paste-and-parse textarea recognises every Wikimedia “Use this file on the web” output (Attribution / HTML embed) and the cogdog/flickr-cc-helper formats; recognised pastes pre-fill a new row with author, source URL, image URL, alt caption and licence. Images get distributed inline through the article body, one after every Nth top-level heading, and each renders as a vanilla Bootstrap <figure> with a full attribution caption including a clickable licence link. Article integrity (3.5.17–3.5.18) — replaces the old Article Tag Integrity tile at the bottom of the dashboard with an Optimise tool that auto-fixes Joomla plumbing (UCM/workflow rows) plus SEO gaps (meta description generated from body, meta keywords from brief keywords or extracted headings, alt text on body images inferred from <figcaption> / filename / article title). Editorial findings (no images, no headings, low word count, no banner choice) surface as recommendations linking to the article edit screen. SEO at generation time (3.5.19) — same auto-fill logic now runs during article creation, so newly-generated articles ship with metadesc / metakey / alt text already filled. Optimise becomes a backfill tool for legacy articles. Async pipeline (3.5.0–3.5.6) — Generate Article kicks off via fastcgi_finish_request and polls a new pipeline_state column on the brief for status, so a slow AI call no longer blocks the request and the truncation-error class becomes much rarer. Research Defaults fieldset (depth / source quality / geographic focus) removed entirely; component now hardcodes Thorough + Balanced + Global. Markdown sanitizer (3.5.12) — any **bold** / *italic* / [label](url) / ## heading / markdown pipe table that the AI smuggled into mostly-HTML body content gets converted to vanilla Bootstrap HTML before persistence. Heading level (3.5.13) — new Article body heading level option (Content Defaults) defaults to h3 to match stock Joomla templates that put the article title in h2. AI prompt, markdown sanitizer and image distribution all honour the chosen level. Brief list columns (3.5.10) — Completeness column dropped, replaced with Modified (sortable), campaign Type badge, and Banner indicator. Brief edit polish (3.5.13–3.5.16) — per-brief Citation Mode override removed (publisher-wide editorial choice via Options now), per-brief Disclaimer override removed (same reasoning), Active tab survives Save / Apply round-trips via user state + hidden form input. Dashboard threshold (3.5.11) — KPI cards appear at ≥3 briefs or ≥1 published (was ≥10 / ≥5) so sites move out of the onboarding hand-holding view sooner. Heredoc-blocked behaviour — set_meta_description / set_meta_keywords Options switches still gate metadesc / metakey at generation; admins who deliberately want them empty keep that control. |
| 3.4.85–3.4.99 | Onboarding refresh, Options simplification, token-cap workaround. Component Options collapsed: Integration fieldset (sef_ids) removed, Refresh fieldset folded into Services, Advanced Defaults folded into Services. Citation Defaults folded into Content Defaults. claude_max_tokens / openai_max_tokens defaults lowered from 8000 to 4000 to dodge the recurring shared-host php-fpm request_terminate_timeout ceiling. Welcome / Ready-to-Use cards on first install honestly describe what works without an AI key. “How Campaigns Work” workflow guide dropped from the dashboard. Continue Generation chip clears on Regenerate. Banner inline placement injects <p class="artigen-banner-inline"><img> into introtext with idempotent regex re-substitution so re-runs don't double-prepend. |
| 3.4.84 | Premium feature gates; News Beat scheduled cadence; Banners gallery; Brief edit polish. Three new tier-feature flags — external_search (Serper / Tavily / Google), article_refresh, advanced_campaign_types (News Beat, Content Calendar, New Product Introduction) — gated at render time on Premium and above. URL fetching from the brief's Sources field stays free on every tier. News Beat scheduled cadence wires the Joomla scheduled task Article Generator — News Beat Cadence to spawn one child brief per cadence period (daily / weekly / monthly) when the gate allows it; on a non-premium tier the task logs “paused” and the Dashboard surfaces a banner counting affected briefs. Tier-paused messages everywhere read as plain English. Banner Icon and Banner Theme moved from the Article tab's Images fieldset to the Brief tab where they belong — they shape the banner the AI renders, not the article's media. The Use Default button in the theme picker now pre-fills with the component-default colour instead of a grey dashed pattern, so admin sees what default resolves to without clicking. Banner text + icon colour are picked per-region by background luminance — light themes get black text, dark themes get white — so picks like coral or lightyellow stay readable. Dashboard Recent Work de-duplicates same-title articles caused by regenerate cycles. |
| 3.4.71–3.4.76 | Banners gallery view; inline theme + icon picker; per-article regenerate. New Banners submenu surfaces a responsive grid of every Joomla article whose image_intro is set — thumbnail, title, state, category, modified date. Filter by category. Each card has an editable title, the full BannerthemeField swatch picker (8 gradients + 8 computing classics + ~140 CSS-named colours, collapsed by default), a Font Awesome icon input, and a Regenerate button. Two regenerate paths share the gallery: brief-sourced articles go through prompt.regeneratebanner and the brief's banner prefs stay in sync; brief-less articles (e.g. Quick Article runs that didn't complete the publish step) go through prompt.regeneratearticlebanner which operates on #__content directly. Both run BannerService inline, return JSON with the freshly-stored URL, and the gallery JS swaps the card's image in place with a cache-bust. Title edits propagate to #__content.title + the brief so the banner image (which embeds the title) and the article header agree. |
| 3.4.70 | Setup & Tips view; Dashboard cleanup. New Setup & Tips submenu hosts the bits that aren't “current state” but help admin tune for better output — API Configuration status, brief Completeness Tips (fields commonly empty across the library), and Research Quality alerts (briefs whose search step produced thin or refused content). Dashboard now stays focused on state: KPI tiles, Recent Work, subscription status, Tag Integrity, support panel. Pipeline Flow tile dropped (referenced images, not banners, served little purpose); Quick Article block moved to Onboarding (it's a getting-started shortcut, not a state tile); Completeness Tips / Research Quality / API Configuration migrated to Setup & Tips. Recent Work's broken Banner link dropped (it pointed to the article editor identically to the title). |
| 3.4.48–3.4.69 | Campaign Types replace Campaign Themes; Workflow expander spawns multi-article briefs; vertical Status stepper. Six built-in Campaign Types on every brief: Single Article, Topic Brief, News Beat, Content Calendar, Competitive Marketing and New Product Introduction. Picking a Type pre-fills the More Options fields (tone, reading level, word count, structure, citation). When the Type fans out to more than one article, the Brief tab's Workflow expander surfaces the spawn controls: New Product Introduction spawns three fixed children (Announce / Explain / Case Study); Content Calendar spawns one child per scheduled date over an admin-chosen range and cadence (daily, weekdays, weekly, Mon-Wed-Fri), capped at 31 per spawn; News Beat spawns one child per “Generate next now” click. Each child inherits body fields verbatim from the parent + a back-link badge for navigation. Idempotent re-clicks. Per-child trash. Calendar series config (start, end, cadence) and News Beat cadence persist on the parent across visits. The right-pane Status sidebar is now a vertical stepper (Brief Created → Research Done → Draft Written → Article Created → optional Continuation Added) mirroring the proposals/edit idiom. Find Images step dropped from the Preview modal (deprecated). Find Images residue scrubbed from Dashboard, edit views and language strings — six dead Openverse / Pexels / Unsplash / Pixabay / Wikimedia config strings retired. Themes entity removed in full (Themes table dropped, orphan theme_id / theme_sequence columns dropped on upgrade with a defensive postflight). |
| 3.4.64–3.4.67 | News Beat scheduled task — plugin moved to task group. The bundled scheduled-task plugin was previously a system-group plugin tagged for the scheduler, a deprecated pattern Joomla 5/6's scheduler doesn't surface. Repackaged as plg_task_artigentasks in the proper task group with two routines: Article Generator — Process Batch Queue (existing) and Article Generator — News Beat Cadence (new). The package postflight enables the new plugin automatically and removes the orphan system row so the Plugin Manager doesn't show two entries. New series_last_run_at column tracks when each News Beat parent last spawned so a fresh sweep respects daily / weekly / monthly intervals; admin can override timing by clicking Generate next now on the brief. Routine titles render properly in System → Scheduled Tasks → New (Joomla 6 expects {langConstPrefix}_TITLE for the dropdown label). |
| 3.4.54–3.4.59 | Continue Generation; Refresh truncation surface; cleaner generate-article messages. Truncated articles — where the AI hit max_tokens before finishing — surface a yellow warning with a Continue generation button. Click it (inline confirm, no browser modal) and the AI is asked to pick up exactly where it left off without a recap. The continuation appends in place, the warning clears when the AI ends cleanly, and a Continuation Added step appears in the Status stepper. The Refresh view banner regeneration also surfaces a truncation banner above the preview when the rewrite hit the ceiling. Each AI call now logs output_tokens / max_tokens / finish_reason to com_artigen's log for diagnosis. Generate-article success message rewritten neutrally: “Article generated. Review the article and click Save.” (was “Article generated and created successfully! View Article” which over-claimed completeness given AI providers don't reliably mark finished output). |
| 3.4.46–3.4.53 | Briefs list polish; Dashboard tag-integrity scan; per-child trash. Briefs list filter row works correctly when the result set is filtered to empty (no more emptystate trap that swallowed the searchtools). Default sort changed to Most recently modified. Dashboard gains a collapsible Article tag integrity card — scan published articles for missing #__ucm_content rows (the cause of “tags don't save”), then repair by re-saving through ArticleModel which rebuilds the UCM row. Doesn't restore previously-deleted tags — Joomla has no tag history — but makes the article tag-capable again so admin can re-add by hand. Per-child trash button on the Workflow expander's children list. Soft delete (state=-2) so admin can recover via Briefs → Trashed. |
| 3.4.21–3.4.45 | Maintenance + Joomla 6 compatibility tail. Joomla 6 has stricter PSR-4 autoloading, removed JPATH_PLATFORM and jexit(), and routes redirects differently — all addressed across the components. Banner placement (inline vs intro/full image fields) gained a component option. Refresh prompt enhancements: stashes {loadmodule…} / {loadposition…} tags as inert placeholders before the AI call and restores them verbatim afterwards. Two-icon banners (e.g. newspaper,bolt) render side-by-side at reduced size. CSS-named-colour themes alongside the eight built-in gradients and eight Computing classics. Buffered-output guard added across AJAX endpoints so a stray PHP notice can't corrupt JSON responses. |
| 3.4.20 (production) | Regenerate banner no longer touches the article body. The banner-only Regenerate banner toolbar action shared an article-save helper with the full Refresh apply path, which clears the article's fulltext (the part after a Read More break) before writing back. On articles split by Read More, regenerating the banner silently wiped the post-break content. The shared helper now takes an explicit signal for whether to clear fulltext; the banner action passes “leave alone.” Regenerate banner already never calls the AI — just a GD render and an article save of body + images — so the “banner-only, no token cost, no body damage” guarantee is restored. If you have an affected article, the original fulltext is in #__history for that article (Joomla auto-versions each save) — open the article in com_content, click Versions in the toolbar, and restore the version from just before the bad regenerate. |
| 3.4.16–3.4.19 | Refresh workflow polish; banner placement option; banner defaults from Options. The Refresh page splits into two stacked panes — an Article pane (title, history/edit links, banner) above a Refresh pane (banner icon/theme, source URLs, instructions, Generate Preview) — so the article being acted on stays anchored above the configuration controls. New Banner placement component option (default Inline at top of body) chooses where the generated banner attaches to the article: as a wrapped paragraph at the top of the body, replaceable in place on subsequent regenerates; or as the article's Intro & Full Article images. Inline mode uses a CSS-class marker (was a data-* attribute, which Joomla's content filter strips on non-Super-User groups) and clears the Intro/Fulltext image fields so the header doesn't show twice. About Refresh moved from the Refresh page to the Dashboard as a collapsible card under Pipeline Flow with an Open Refresh shortcut. The Article Banner section in Options now uses the full palette + computing-classics + CSS-named-colours picker for default banner theme, accepts comma-separated icon names, and is the source of defaults the Refresh form falls back to when an article has no saved draft. The toolbar follows the standard Joomla order — Save | Close | New | divider | Regenerate banner; Save stays on the Refresh page and surfaces a dismissible success notice at the top; clicking Generate Preview smooth-scrolls to the top so the activity log is in view as the pipeline runs. The gradient + computing-classics halves of the picker stack vertically on narrow form columns so the Computing classics half can't overflow. |
| 3.4.12–3.4.15 | Banner Theme palette picker; 8 Computing classics themes; toolbar and pane relocation. The Banner Theme field is a clickable palette grid: built-in gradient PNG themes (each swatch shows the actual PNG it will paint), then eight hand-tuned Computing classics — Blissful (XP), Bondi Blue (iMac G3), Terminal Green (CRT), Amber CRT, Tangerine (iMac G3), Graphite (Power Mac G4), Synthwave, Blueprint — then every CSS named colour sorted by hue and rendered as a vertical light→dark gradient. The banner generator paints a real two-tone gradient for any CSS colour (no more solid fills); the picker swatches and the rendered banner share the same HSL-derived endpoints so they read identical. (The 3.4.9 dropdown silently fell back to a plain text input on case-sensitive Linux filesystems because Joomla's FormHelper resolves type="bannertheme" to BannerthemeField with a lower-case ‘t’; the file/class is now named to match.) The Article + Refresh panes split; the new banner moves up out of the preview pane to replace the old “current banner” slot at the top of the page, labelled simply Banner; toolbar is now Save | Close | New | divider | Regenerate banner (the prior Regenerate / Save Draft / Discard buttons were retired); the gradient + computing-classics rows are laid out as two halves so the eight gradient swatches no longer leave empty cells on the right. |
| 3.4.9–3.4.11 | Two-icon banners; CSS-named-colour themes; Joomla snippet preservation in Refresh; Regenerate banner toolbar action. banner_icon accepts two comma-separated names (e.g. newspaper,bolt) and renders them side by side at a reduced size in the same icon footprint; the right icon stays anchored where a single icon would sit so the visual weight doesn't shift when you add a second. banner_theme accepts any of the 147 CSS named colours alongside the existing eight gradient themes. The Refresh prompt now stashes Joomla content-plugin tags — {loadmodule…}, {loadposition…}, {loadarticle…}, etc. — as inert [ARTIGEN_SNIPPET_N] placeholders before the AI call and restores them verbatim afterwards so the model can't mangle quote style, args, or the tag itself. The prompt also stopped suggesting an explicit “What's changed in {year}” heading — the model weaves new material into the existing narrative without a labelled section. A new Regenerate banner toolbar action regenerates only the banner (no AI, no body change), driving the same banner stage the full pipeline uses with an in-place cache-buster so a regenerate within the same second still re-fetches. |
| 3.4.4–3.4.8 | Refresh hardening and preview-pane refactor. Long-running Refresh pipeline calls survive PHP-FPM and nginx timeouts (server-side limit lifted to 600s where the host allows). AJAX responses can no longer be corrupted by a stray PHP notice leaking into the output buffer (buffer flushed before write; JSON_INVALID_UTF8_SUBSTITUTE on encode so a non-UTF8 byte from the LLM can't return an empty body). The preview pane shows the current and new banners side by side with Open original article and Preview refreshed body buttons replacing the broken inline iframe of the article body; the new banner reveals correctly post-Compose (the previous display:none inline style won over Bootstrap's d-none); the Atum admin's auto-injected external-link glyph on target="_blank" no longer doubles up. Banner URLs include the Joomla root path so they resolve correctly from the /administrator/ context. |
| 3.4.3 | Joomla 6 compatibility for outbound API calls. AI text generation, web search and image-provider lookups now read HTTP responses through the current Joomla API. On Joomla 6 the previous response accessor returned null, which could make those calls silently fail (no search results, no images, generation errors). No configuration change required. |
| 3.4.2 (production) | Refresh Article — bring an existing Joomla article up to date. New view at Components → Article Generator → Refresh Article. Pick any article via Joomla's modal article picker; the page loads icon + theme controls, a source-URLs textarea and an editor's note. Generate Preview runs a five-stage AI pipeline shown live in an activity log: load article → targeted web search (“{title} {year} latest”) → fetch the top sources and distil each into a focused KEY FACTS list (one AJAX call per source so progress is visible) → ask the model to rewrite the article around those facts while preserving voice and section skeleton → regenerate the 1200×630 banner to a staged preview path. The refreshed draft loads into the standard Joomla editor side-by-side with the current article body in a sandboxed iframe — tweak it before applying. Apply refresh commits the change via Joomla's ArticleModel so every refresh creates a normal content history version (rollback from the article's Versions toolbar button) and fires the usual content-save events. Save draft persists the editor + form state to a new #__artigen_article_refresh_drafts table; the Refresh view shows a Drafts in progress list so unfinished work is easy to find across articles. Per-article banner preferences (icon + theme) are remembered between refreshes. A Diagnostics disclosure under the activity log exposes the source list, the exact prompt sent to the model, and the raw model response, plus a similarity percentage flagging any run where the model declined to change much. Blockquotes — whether kept from the original or lifted from sources — render in the Multizone <figure> / <blockquote> / <figcaption> pattern with author and citation populated from the source. While a refresh is running the rest of the view collapses to keep focus on the activity log with a clear “please wait” banner. The article-scoped actions (Apply refresh, Save draft, Discard preview, New) live in the toolbar. An optional Cheap summariser setting uses GPT-4o Mini (OpenAI) or Claude Haiku (Claude) for the per-source distil stage while the main rewrite keeps your configured model — about 25% off a typical refresh. |
| 3.4.0 (production) | Refresh Article — bring an existing Joomla article up to date. New view at Components → Article Generator → Refresh Article. Pick any article via Joomla's modal article picker; the page loads icon + theme controls, a source-URLs textarea and an editor's note. Generate Preview runs a five-stage AI pipeline shown live in an activity log: load article → targeted web search (“{title} {year} latest”) → fetch the top sources and distil each into a focused KEY FACTS list (one AJAX call per source so progress is visible) → ask the model to rewrite the article around those facts while preserving voice and section skeleton → regenerate the 1200×630 banner to a staged preview path. The refreshed draft loads into the standard Joomla editor side-by-side with the current article body in a sandboxed iframe — tweak it before applying. Apply refresh commits the change via Joomla's ArticleModel so every refresh creates a normal content history version (rollback from the article's Versions toolbar button) and fires the usual content-save events. Save draft persists the editor + form state to a new #__artigen_article_refresh_drafts table; the Refresh view shows a Drafts in progress list so unfinished work is easy to find across articles. Per-article banner preferences (icon + theme) are remembered between refreshes. A Diagnostics disclosure under the activity log exposes the source list, the exact prompt sent to the model, and the raw model response, plus a similarity percentage flagging any run where the model declined to change much. Blockquotes — whether kept from the original or lifted from sources — render in the <figure> / <blockquote> / <figcaption> pattern with author and citation populated from the source. While a refresh is running the rest of the view collapses to keep focus on the activity log with a clear “please wait” banner. |
| 3.2.0 | Joomla 6 Pre-Update Check no longer flags plg_system_artigentasks as a Potentially Dangerous Plugin. The plugin now declares its own compatibility-only update manifest so the check can verify J5 / J6 compatibility — pkg_artigen itself remains the canonical update path, so customers always update via the package. |
| 3.1.7 | Production release consolidating issues found in testing. Versions 3.1.1 through 3.1.6 iterated through this change before the consolidated release shipped. Subscription validation traffic reduced. The cache was repeatedly invalidating on every admin page render due to a signature mismatch with the validation API. Now caches successfully for 24 hours, so an active admin generates ~1 validation call per day rather than per page. Internal trait alignment across the four paid extensions; future drift is caught by a pre-push gate. |
| 3.1.0 | All five extensions updated to 3.1 — coordinated production release. |
| 3.0.30 | Dashboard tile regex fix in the shared “Multizone Extensions” admin home panel — aligns with the same fix shipped across the suite. |
| 3.0.28–3.0.29 | Pipeline progress indicators no longer loop and produce duplicate articles; regenerate path resilient to missing search_report column; banner generation polish. |
| 3.0.27 | Auto-generated article banners: 1200×630 gradient PNG banners with title and Font Awesome icon, rendered server-side via PHP GD using bundled backgrounds, Roboto-Bold and Joomla's bundled Font Awesome webfonts (1,895 icons). Per-Brief icon and theme overrides (maroon, blue, green, slate, purple, teal, orange, windows 95). New banner editor with live preview replaces image candidates picking when auto-banner is on. Article Banners list shows thumbnail, icon name, theme swatch, and opens an in-component edit form with save/close toolbar. |
| 3.0.26 | Claude (Anthropic) support alongside OpenAI via a provider abstraction; 3-step onboarding wizard to pick provider, paste key, test key, and generate a test article; Quick Article dashboard card for one-click title+topic pipeline; HttpClient retries transient 429/502/503/504; pipeline modal restyled to Atum, bootstrap.modal dependency loaded on the Brief edit view (fixes silent Generate Article failure); search step failures are now non-fatal. Fixes: PHP 8.2 dynamic property deprecation on PromptController::$verificationQueries; anglesLogDone classList-on-null bug when the element was detached by outerHTML. |
| 3.0.25 | Author email updated across all manifests |
| 3.0.14 | Removed legacy dlid element from package manifest that caused spurious "Download Key is missing" warning in Joomla update checker |
| 3.0.12 | Cross-promotion panel for pkg_metagen, KPI backfill and product filter fixes |
| 3.0.10 | Extension directory cards enriched with icons, badges, and changelogs |
| 3.0.6 | SQL migration sync in postflight, dashboard tile format migration and sizing fixes, subscription widget link corrections |
| 3.0.5 | Subscription widget link corrections, terminology alignment |
| 3.0.2 | Catch Throwable in script.php TierService wrapper for fresh install compatibility |
| 3.0.1 | Dashboard house style standardisation, grouped Home Dashboard tile, tier limits and pricing alignment |
| 3.0.0 | No-API-key workflow for article generation without pre-configured keys, tier defaults, non-blocking pipeline, meta description fixes |
| 2.9.0 | Security hardening and JED Checker compliance across all packages |
| 2.8.1 | Product feature limit enforcement, branding updates |
| 2.7.0 | Product Features system, master mode validation, standardised author and copyright |
| 2.6.0 | Packaged as pkg_artigen with system plugin for background batch processing, content calendar, dashboard overhaul |
| 2.5.0 | Multiple image providers (Pexels, Unsplash, Pixabay, Wikimedia), standalone image chooser with save-to-article sync |
| 2.3.0 | Campaign Themes — generate multiple related articles from a single creative brief |
| 2.0.0 | Renamed to com_artigen, multiple search providers (Serper, Tavily, Google Custom Search) |
| 1.0.0 | Initial release — AI-powered article generation with search, image finding, and one-click pipeline |