Skip to content

Release v0.2.0: content audit + Joomla 6.1 alignment#23

Merged
bcordis merged 15 commits into
mainfrom
develop
Apr 30, 2026
Merged

Release v0.2.0: content audit + Joomla 6.1 alignment#23
bcordis merged 15 commits into
mainfrom
develop

Conversation

@bcordis
Copy link
Copy Markdown
Member

@bcordis bcordis commented Apr 30, 2026

Bring the v0.2.0 — content audit milestone into main and realign the entire skill against the Joomla 6.1 release (released 2026-04-14, joomla-cms 6.1-dev is the new default reference branch). Closes the audit campaign that tracked through issues #1#5, #6, and #11 across 14 merged PRs.

Two things land together

1. Joomla 6.1 alignment (issue #11 + every per-section audit's verification step)

J6.1 was released 2026-04-14 — after this skill's v0.1.0 cut. The release ships:

Every example in SKILL.md and the 14 reference files is verified against joomla-cms 6.1-dev HEAD; PR #20 re-checked all 14 cited permalinks on 2026-04-30 and confirmed zero drift.

2. Content audit (issue #6 meta + #1#5 per-section)

Same skill, same scope, but every section walked end-to-end and the cross-cutting bits extracted into shared references. Token cost per skill load is meaningfully lower — SKILL.md shrunk by ~1180 lines as Editor API / Form Fields / Testing / Common Gotchas moved into on-demand references/*.md. No breaking changes.

What landed in this release

Per-section audits

Meta-audit (issue #6)

Other

Changelog

Full entry-by-entry list is in CHANGELOG.md under [Unreleased]. After this PR merges, the release stamp commit on main will:

  1. Rename [Unreleased][0.2.0] — 2026-04-30
  2. Bump marketplace.json ref from v0.1.0v0.2.0 so /plugin update delivers the new version
  3. Tag v0.2.0, release workflow auto-publishes

Test plan

Closes

Closes #1, closes #2, closes #3, closes #4, closes #5, closes #11.
(Issue #6 already closed; #7, #8, #9, #10, #12#16 are PR numbers, not issues.)

🤖 Generated with Claude Code

bcordis and others added 15 commits April 30, 2026 05:50
Closes #1.

- Extract Editor API, Form Fields, Testing, and Common Gotchas from
  skills/joomla/SKILL.md into dedicated references/*.md files. Each
  in-file section becomes a short pointer stub. SKILL.md drops from
  3594 to ~2434 lines without losing content.
- Correct PHP requirement against manual.joomla.org for Joomla 6.x:
  minimum and supported = 8.3.0, recommended = 8.4. Update headline
  plus four code examples (changelog note, update-server XML,
  install-script $minimumPhp, composer.json) from 8.2 to 8.3.
  $minimumJoomla declares which Joomla versions an extension supports
  and is independent of $minimumPhp; a J6-native extension that also
  supports J5.x must still pin PHP to 8.3.0 (the J6.x floor).
- Extend the Quick Start cross-reference list with the four new
  reference files.
- CHANGELOG [Unreleased] documents the splits and the PHP correction.
The skill is generic Joomla 5+/6 guidance; it shouldn't lean on specific
third-party extension code or naming conventions as canonical examples.

- SKILL.md L507/L509/L2390: CwmBooking/cwmmessages/Cwm prefix → vendor-neutral
  AcmeBooking/bookings/<Vendor> placeholders.
- references/module.md L278: Proclaim example → generic "larger Joomla projects".

Joomla-Bible-Study/claude-skill-joomla in SKILL.md:38 stays — that's the
canonical home of the skill itself, not borrowed code.

CHANGELOG [Unreleased] gets a [Fixed] entry.
…l three gaps, fix typos (#9)

Closes #2.

Splits and shared extractions:
- references/component-router.md — 304-line Router (SEF URLs) walkthrough.
- references/install-script.md — install/update lifecycle (cross-cutting:
  component/module/plugin all use the same hooks; class names differ).
- references/language-files.md — naming, key prefixes, plurals, .sys.ini
  vs .ini, Text::script() registration (cross-cutting).
- references/service-provider.md — universal services/provider.php pattern
  (cross-cutting; per-type factories differ).
- references/manifest.md — universal <extension> elements (cross-cutting;
  type-specific blocks delegated to each type's reference).
component.md keeps stubs/cross-link intros at the same anchors.

Content gaps closed:
- Language Files section (was a complete gap — manifest declared <languages>
  but no .ini content shown).
- Database Schema & Migrations (was a complete gap — manifest declared
  <install>/<schemas> but no SQL shown). Includes install.mysql.utf8.sql,
  per-version updates/mysql/X.Y.Z.sql, DDL-only/idempotent/no-rollback
  rules, #__schemas tracking.
- Other View Types subsection (JsonView, RawView, FeedView).

Cross-references between Install/Update Script and Database Schema &
Migrations (the two halves of the install system) so neither section
reads like an independent topic.

Bug fixes:
- Two @var type-hints used \Namespace\Component\Example\… (typo);
  changed to \Vendor\… so IDEs resolve.
- CustomlistField example missing use Joomla\CMS\HTML\HTMLHelper.
- Install-script $minimumPhp example bumped 8.2.0 → 8.3.0 (J6.x floor).

CHANGELOG [Unreleased] updated.
)

Joomla 6.1 deprecates passing DispatcherInterface to CMSPlugin::__construct
(joomla-cms PR #46683). Old form still works but emits E_USER_DEPRECATED
and will be removed in J7.0.

- references/plugin.md service-provider example: single-arg
  instantiation, no DispatcherInterface import or lookup. Matches the
  migrated plg_captcha_powcaptcha provider in core.
- New "Joomla 6.0 / 6.1 / 7.0 — dispatcher constructor change" callout
  with the verbatim deprecation message, a permalink to the upstream
  CMSPlugin.php on 6.1-dev, and the legacy-two-arg form documented for
  J5/J6.0 backward compat.
- Dead use Joomla\Event\DispatcherInterface; removed from the plugin
  class example.
- references/service-provider.md plugin row updated.

Tracks #11.
… verification (#13)

Closes #3.

- Cross-references to all four shared refs added (manifest, language-files,
  service-provider, install-script). New Language Files section, new Install
  Script (Optional) section, intros on Manifest XML and Service Provider.
- Web Asset Manager registration subsection inside Dispatcher (useStyle/
  useScript against joomla.asset.json, Text::script() registration).
- Caching section (default per-instance keying, URL- and session-state
  edge cases, no dispatcher-level public cache-key hook).
- Joomla 6.1 capabilities section (Versions for Modules / UCM history,
  #__extensions.custom_data column).
- Verified AbstractModuleDispatcher and mod_articles_news provider against
  joomla-cms 6.1-dev — both unchanged for 6.1; permalinks captured.
- Module dispatchers don't extend CMSPlugin, so the J6.1 plugin-constructor
  deprecation (#12) does not affect modules.

CHANGELOG [Unreleased] updated under issue #3 audit subsection.
…oloadLanguage, pitfalls, J6.1 verify (#14)

Closes #4.

Bug fixes:
- Manifest <language> path was en-GB/plg_content_example.ini (legacy
  admin-installed naming). Fixed to en-GB/en-GB.plg_content_example.ini
  (locale-prefixed source-tree naming) per language-files.md. Added the
  missing .sys.ini line — most plugins ship both runtime and .sys.ini.
- Plugin class example now declares protected $autoloadLanguage = true;
  Without it, runtime PLG_* keys render as raw strings.

Cross-references to shared refs (cross-cutting principle from #2):
- Manifest XML and Service Provider sections get cross-link intros.
- New Language Files section: PLG_<GROUP>_<ELEMENT>_*, locale-prefix rule,
  $autoloadLanguage requirement, task-plugin _TITLE/_DESC suffix rule.
- New Install Script (Optional) section pointer to install-script.md.

New Common Pitfalls section covering seven highest-frequency plugin
install/load failure modes.

J6.1 verification (continuous):
- getSubscribedEvents() shape verified against plg_content_pagebreak on
  6.1-dev — string event-name keys, no class constants.
- ContentEvent abstract base on 6.1-dev confirmed to deliberately NOT
  define ON_* constants. Typed event classes (ContentPrepareEvent etc.)
  exist only as handler-parameter types, not as keys for
  getSubscribedEvents().
- Initial audit flagged events-as-strings as drift; upstream verification
  shows the skill's pattern matches core. Docblock added explaining the
  distinction.

Dispatcher-constructor change from PR #12 unchanged — that callout was
already correct.

CHANGELOG [Unreleased] updated under issue #4 audit subsection.
…all-script sections, J6.1 verify (#15)

Closes #5.

- Added Table of Contents (file had none) with cross-link annotations on
  each line that delegates to a shared reference (manifest, language-files,
  install-script).
- Manifest XML: cross-link intro to manifest.md for universal <extension>
  elements; library-specific bits (<libraryname>, <files folder=...>) stay
  inline. Verified element handling against LibraryAdapter on 6.1-dev.
- Language Files: replaced inline duplication with a stub delegating to
  language-files.md; preserved library-specific reminders (.sys.ini-only
  is common; locale-prefixed source filename).
- New Versioning & Updates section: universal <version>/<updateservers>
  flow applies; <update><schemas> is component-only; PHP-level migrations
  belong in consuming extensions; <targetplatform> regex guidance.
- New Install Script (Optional) section: libraries DO support <scriptfile>
  (verified via LibraryAdapter); class-naming Lib<Element>InstallerScript
  follows the shared pattern in install-script.md.

J6.1 verification: LibraryAdapter on 6.1-dev unchanged; no items in the
J6.1 milestone affect libraries.

CHANGELOG [Unreleased] gets new Added / Verified entries under the issue
#5 audit subsection.
…tplatform regex example (#16)

Closes the remaining sections of #11.

SKILL.md § Canonical sources:
- 5.3-dev / 6.0-dev → 6.1-dev (default for new J6 code) + 6.2-dev +
  5.4-dev + 7.0-dev. Verified against /branches on 2026-04-30 (post-J6.1).
- All five tree/6.0-dev/... permalinks updated to tree/6.1-dev/...
- Re-verification note added.

SKILL.md frontmatter description:
- Trigger keywords extended: Joomla 5.4 / 6.1 / 6.2 / 7 alongside the
  existing Joomla 5 / Joomla 6.

Update-server <targetplatform> regex:
- Primary example bumped 5\.[0-9]+ → 6\.[0-9]+ to align with the
  skill's natively-J6 framing.
- Prose rewritten to show all three useful regexes (J6-only, J5-only,
  J5/J6 dual-support).

CHANGELOG [Unreleased] gets a Changed (issue #11) subsection.
…stency (#17)

Surface the five shared references (manifest.md, install-script.md,
language-files.md, service-provider.md, component-router.md) in
SKILL.md's index — they were extracted in PRs #9/#13/#14/#15 and linked
from per-type files but never indexed in SKILL.md itself.

Add deferral pointers at the head of SKILL.md's Service Provider,
Language Files, Manifest XML, and Install/Update Script sections so
shared content has one canonical home and the inline component-flavored
examples are explicitly framed as type-specific.

Harmonize SKILL.md's install-script preflight example with the canonical
Log::add(..., 'jerror') pattern in install-script.md; was using
\$adapter->getParent()->abort(...) which is also valid but is the kind
of "same situation, two patterns" drift issue #6 is meant to catch.

Verified (no changes needed): per-extension service-provider /
install-script / language-files sections in component.md, module.md,
plugin.md, library.md all defer correctly to the shared references.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Trigger-phrase audit (#6): expand frontmatter keyword coverage

Brainstormed 15 realistic Joomla prompts and checked each against the
current frontmatter description; misses concentrated in 5 areas:

- J3 / J4 / J5 / J6 / J7 shorthand (substring of "Joomla 5" doesn't catch "J5")
- install script / scriptfile
- WAM / Web Asset Manager / joomla.asset.json / useScript / useStyle
- layout override / template override
- plugin subtypes: task plugin / scheduled tasks / webservices / finder /
  schemaorg / SubscriberInterface / CMSPlugin

Added these inline; also added "Joomla libraries" (the library extension
type was missing) and the SEF router contract. Two more example trigger
phrases added to sentence 4.

No restructuring — existing prose pattern preserved. Over-triggering
risk on non-Joomla PHP work checked: every potentially-generic keyword
(service providers, DI, MVC, manifest) appears with a Joomla qualifier
in the same sentence, and the description repeats "Joomla" 22 times.
No SKIP / negative-trigger sentence added — revisit if observed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Drop J3 / J4 from shorthand list — skill is Joomla 5+ only

Listing J3 / J4 alongside J5 / J6 / J7 as a flat shorthand list
signaled support for Joomla 3 and 4. The skill explicitly targets
Joomla 5+ (natively J6, backward compatible with J5), so triggering on
bare "J3" or "J4" prompts would mislead users into thinking the skill
applies to those versions.

Migration prompts like "migrate my J3 component to J5" still trigger
via the J5 keyword, so realistic coverage isn't lost.

Updated CHANGELOG entry to document the deliberate exclusion.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…or (#19)

Comprehensive grep of SKILL.md and references/*.md for inadvertent uses
of APIs the skill flags as "Never use". Found 3 real slips:

- references/editor-api.md (×2) and references/component.md (×1) used
  filter="JComponentHelper::filterText" in form-field XML examples.
  Replaced with the FQCN form, "\Joomla\CMS\Component\ComponentHelper
  ::filterText", verified against joomla-cms 6.1-dev's article.xml in
  com_content (which uses the FQCN). The legacy J-prefix alias still
  resolves on J5/J6 but is slated for removal with the rest of the
  legacy class aliases.

Also scoped the SKILL.md deprecation table entry for getError/setError
to "on models (BaseDatabaseModel)". The previous unscoped entry could
be misread to imply that Table::check()'s setError + return false
validation pattern is also deprecated, but it isn't — verified against
joomla-cms 6.1-dev's Joomla\CMS\Table\Content::check() which uses the
exact same shape.

Verified existing BC labels are clear (plugin constructor J6.1+, editor
API legacy proxy). Sweep is not exhaustive across joomla-cms 6.2-dev /
7.0-dev — that's noted as a follow-up audit candidate.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Re-fetched every joomla/joomla-cms permalink cited in SKILL.md and
references/*.md against 6.1-dev HEAD. Every URL resolves and every
cited claim still matches.

Verified:
- 5 file-content claims (mod_articles_news service provider triple,
  AbstractModuleDispatcher constructor + getLayoutData shape,
  CMSPlugin J6.1 single-arg constructor + deprecation message text,
  LibraryAdapter parses libraryname/manifest_script,
  pagebreak getSubscribedEvents() string keys)
- 3 release/PR/milestone references (PRs #46772, #46622, milestone 148
  for Joomla 6.1.0 released 2026-04-14)
- 6 tree-browse references (components, plugins, modules, libraries
  paths under 6.1-dev)

No skill content changes — this is a pure verification pass. Findings
documented in CHANGELOG with a per-citation matrix so the next sweep
can run the same checks.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
)

Compared the skill's plugin coverage against joomla-cms 6.1-dev's 24
plugin groups. The skill walks 10 in depth (content, system, finder,
task, webservices, schemaorg, user, installer, editors, editors-xtd)
and indirectly covers component-side workflow + form-field XML +
JoomlaEditor JS API. The remaining 14 are niche enough that going deep
on each would bloat the skill without serving the typical extension
developer.

Added a new "Other plugin groups (not covered in depth here)"
subsection to plugin.md right after the common-groups table. Each of
the 14 uncovered groups gets a one-line "what it's for" description so
users can see at a glance what's in/out of scope and decide whether to
file an issue requesting depth on a specific one.

Also called out CLI / `joomla console` command authoring as
out-of-scope for v0.x — it isn't a plugin group, but it's a common J5+
question that the skill currently doesn't address.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Markdown source backing manual.joomla.org. Useful when grepping,
fetching raw, or citing a permalink to a specific page; documentation
corrections also go here as PRs. Paired with the existing rendered-site
entry under SKILL.md § Canonical sources, and surfaced in the README's
sources list.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
# Conflicts:
#	CHANGELOG.md
#	README.md
#	skills/joomla/SKILL.md
@bcordis bcordis changed the title Release v0.2.0: content audit (issues #1–#6, #11) Release v0.2.0: content audit + Joomla 6.1 alignment Apr 30, 2026
@bcordis bcordis merged commit 64a49e4 into main Apr 30, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant