Audit client/extension repos for stale manifest metadata (element_name / extension_type) → silent no-update #759

Open
opened 2026-07-06 16:56:35 +00:00 by jmiller · 3 comments
Owner

Systemic follow-up from #752. The bare /<owner>/<repo>/updates.xml feed is generated from a repo's first-class metadata (element_name, extension_type, display_name — the RepoMetadata DB fields; .mokogitea/manifest.xml is removed). Joomla matches updates by (type, element), so if a repo's metadata is stale/wrong, the generated feed emits a (type, element) that the installed extension never matches → the client site silently never auto-updates.

Concrete case (already fixed)

ClarksvilleFurs/client-mokosuite-clarksvillefurs carried element_name=tpl_clarksvillefurs, extension_type=template (leftover template-style setup) while the actual installed extension is file/file_mokoonyx_clarksvillefurs. The bare feed emitted <type>template</type>/<element>tpl_clarksvillefurs</element> → no match. Corrected via PUT /repos/.../metadata and the feed regenerated correctly.

Task

Audit every client/extension repo in the org: compare its first-class metadata extension_type + element_name against its actual Joomla extension <type>/<element> (from the installed package / *.xml). Fix mismatches via PUT /repos/{owner}/{repo}/metadata.

  • Tooling now supports it directly: mokogitea_metadata_update (mcp-mokogitea-api #34, v1.5.0) exposes element_name/extension_type.
  • Likely-affected: client-mokosuite-*, MokoSuite* extension repos, template-derived clients.
  • Deliverable: a checked list of repos with corrected metadata + a spot-check that each bare /updates.xml emits the right (type, element).

Refs #752 (comment), mcp-mokogitea-api #34.

https://claude.ai/code/session_01Wsno14cxE49MstXFs9G5KT

Systemic follow-up from #752. The bare `/<owner>/<repo>/updates.xml` feed is generated from a repo's **first-class metadata** (`element_name`, `extension_type`, `display_name` — the `RepoMetadata` DB fields; `.mokogitea/manifest.xml` is removed). Joomla matches updates by **(type, element)**, so if a repo's metadata is stale/wrong, the generated feed emits a `(type, element)` that the installed extension never matches → the client site **silently never auto-updates**. ## Concrete case (already fixed) `ClarksvilleFurs/client-mokosuite-clarksvillefurs` carried `element_name=tpl_clarksvillefurs`, `extension_type=template` (leftover template-style setup) while the actual installed extension is `file`/`file_mokoonyx_clarksvillefurs`. The bare feed emitted `<type>template</type>`/`<element>tpl_clarksvillefurs</element>` → no match. Corrected via `PUT /repos/.../metadata` and the feed regenerated correctly. ## Task Audit **every client/extension repo** in the org: compare its first-class metadata `extension_type` + `element_name` against its **actual Joomla extension** `<type>`/`<element>` (from the installed package / `*.xml`). Fix mismatches via `PUT /repos/{owner}/{repo}/metadata`. - Tooling now supports it directly: `mokogitea_metadata_update` (mcp-mokogitea-api #34, v1.5.0) exposes `element_name`/`extension_type`. - Likely-affected: `client-mokosuite-*`, `MokoSuite*` extension repos, template-derived clients. - Deliverable: a checked list of repos with corrected metadata + a spot-check that each bare `/updates.xml` emits the right `(type, element)`. Refs #752 (comment), mcp-mokogitea-api #34. https://claude.ai/code/session_01Wsno14cxE49MstXFs9G5KT
Author
Owner

Branch created: feature/759-audit-client-extension-repos-for-stale-m

git fetch origin
git checkout feature/759-audit-client-extension-repos-for-stale-m
Branch created: [`feature/759-audit-client-extension-repos-for-stale-m`](https://git.mokoconsulting.tech/MokoConsulting/MokoGitea-Fork/src/branch/feature/759-audit-client-extension-repos-for-stale-m) ```bash git fetch origin git checkout feature/759-audit-client-extension-repos-for-stale-m ```
Author
Owner

Audit results (read-only — no metadata changed)

Audited 38 client/extension candidates (MokoSuite* + MokoOnyx/MokoJoomHero/MokoWaaS); 43 infra/tooling/template/mcp repos skipped. 6 flagged, 20 clean, 12 undetermined (stubs).

Flagged — metadata drives a (type, element) no installed extension matches → silent no-update

repo metadata (type/element) actual (from manifest) fix
MokoSuiteCRM package / pkg_mokosuitecrm pkg_mokosuite_crm element → pkg_mokosuite_crm
MokoSuiteERP package / pkg_mokosuiteerp pkg_mokosuite_erp element → pkg_mokosuite_erp
MokoSuiteInsight package / pkg_mokosuiteinsight pkg_mokosuitesight element → pkg_mokosuitesight
MokoSuiteOpenGraph package / pkg_mokosuiteopengraph pkg_mokoog element → pkg_mokoog
MokoSuiteShop package / pkg_mokosuiteshop pkg_mokoshop element → pkg_mokoshop
MokoWaaS generic / template-generic package / pkg_mokowaas type → package, element → pkg_mokowaas (never customized from Template-Generic — closest ClarksvilleFurs analog)

Clean (20)

Backup, Beauty, Child, Client, Create, Cross, Editor, Field, HQ, HRM, MRP, NPO, POS, Realty, Restaurant, StoreLocator, Support, Auto; plus MokoOnyx (template/mokoonyx) and MokoJoomHero (module/mod_mokojoomhero). Note: Joomla templates use the raw folder name, no tpl_ prefix — so MokoOnyx's mokoonyx is correct.

Undetermined — 12 stubs (metadata present, no source/manifest on main yet)

Community, Booking, Church, Construction, Event, Gym, Library, Logistics, Marina, Rental, Storage, Taxi — internally-consistent pkg_ but no extension to verify against. Re-audit when source lands.

Coverage gaps (need separate work)

  1. client-mokosuite-* repos live in separate client orgs, not MokoConsulting — outside this org-scoped audit. A per-client-org sweep is needed to catch the ClarksvilleFurs class (the original reference case).
  2. MokoSuiteHQ references .../MokoSuiteHQ/updates.xml in <updateservers> but the file doesn't exist on main — an update-server gap (separate from metadata staleness).

https://claude.ai/code/session_01Wsno14cxE49MstXFs9G5KT

## Audit results (read-only — no metadata changed) Audited 38 client/extension candidates (`MokoSuite*` + `MokoOnyx`/`MokoJoomHero`/`MokoWaaS`); 43 infra/tooling/template/mcp repos skipped. **6 flagged, 20 clean, 12 undetermined (stubs).** ### Flagged — metadata drives a `(type, element)` no installed extension matches → silent no-update | repo | metadata (type/element) | actual (from manifest) | fix | |---|---|---|---| | MokoSuiteCRM | package / `pkg_mokosuitecrm` | `pkg_mokosuite_crm` | element → `pkg_mokosuite_crm` | | MokoSuiteERP | package / `pkg_mokosuiteerp` | `pkg_mokosuite_erp` | element → `pkg_mokosuite_erp` | | MokoSuiteInsight | package / `pkg_mokosuiteinsight` | `pkg_mokosuitesight` | element → `pkg_mokosuitesight` | | MokoSuiteOpenGraph | package / `pkg_mokosuiteopengraph` | `pkg_mokoog` | element → `pkg_mokoog` | | MokoSuiteShop | package / `pkg_mokosuiteshop` | `pkg_mokoshop` | element → `pkg_mokoshop` | | MokoWaaS | generic / `template-generic` | package / `pkg_mokowaas` | type → `package`, element → `pkg_mokowaas` (never customized from Template-Generic — closest ClarksvilleFurs analog) | ### Clean (20) Backup, Beauty, Child, Client, Create, Cross, Editor, Field, HQ, HRM, MRP, NPO, POS, Realty, Restaurant, StoreLocator, Support, Auto; plus **MokoOnyx** (template/`mokoonyx`) and **MokoJoomHero** (module/`mod_mokojoomhero`). Note: Joomla **templates use the raw folder name, no `tpl_` prefix** — so MokoOnyx's `mokoonyx` is correct. ### Undetermined — 12 stubs (metadata present, no source/manifest on `main` yet) Community, Booking, Church, Construction, Event, Gym, Library, Logistics, Marina, Rental, Storage, Taxi — internally-consistent `pkg_` but no extension to verify against. Re-audit when source lands. ### Coverage gaps (need separate work) 1. **`client-mokosuite-*` repos live in separate client orgs**, not `MokoConsulting` — outside this org-scoped audit. A per-client-org sweep is needed to catch the ClarksvilleFurs class (the original reference case). 2. `MokoSuiteHQ` references `.../MokoSuiteHQ/updates.xml` in `<updateservers>` but the file doesn't exist on `main` — an update-server gap (separate from metadata staleness). https://claude.ai/code/session_01Wsno14cxE49MstXFs9G5KT
Author
Owner

6 fixes applied + verified (2026-07-06)

All 6 flagged repos corrected via PUT /metadata (200 each), and the bare /updates.xml feeds confirmed regenerating with the correct (type, element):

  • MokoSuiteCRM → pkg_mokosuite_crm
  • MokoSuiteERP → pkg_mokosuite_erp
  • MokoSuiteInsight → pkg_mokosuitesight
  • MokoSuiteOpenGraph → pkg_mokoog
  • MokoSuiteShop → pkg_mokoshop
  • MokoWaaS → package / pkg_mokowaas

Spot-checked: MokoSuiteCRM/updates.xml emits <type>package</type><element>pkg_mokosuite_crm</element> ✓; MokoWaaS/updates.xml emits pkg_mokowaas ✓.

MokoConsulting-org portion of this audit is done. Remaining: 12 stub repos (re-audit when source lands) and the two coverage gaps — the per-client-org sweep (filed separately) and the MokoSuiteHQ missing updates.xml. Closing the MokoConsulting scope.

## ✅ 6 fixes applied + verified (2026-07-06) All 6 flagged repos corrected via `PUT /metadata` (200 each), and the bare `/updates.xml` feeds confirmed regenerating with the correct `(type, element)`: - MokoSuiteCRM → `pkg_mokosuite_crm` - MokoSuiteERP → `pkg_mokosuite_erp` - MokoSuiteInsight → `pkg_mokosuitesight` - MokoSuiteOpenGraph → `pkg_mokoog` - MokoSuiteShop → `pkg_mokoshop` - MokoWaaS → `package` / `pkg_mokowaas` Spot-checked: `MokoSuiteCRM/updates.xml` emits `<type>package</type><element>pkg_mokosuite_crm</element>` ✓; `MokoWaaS/updates.xml` emits `pkg_mokowaas` ✓. **MokoConsulting-org portion of this audit is done.** Remaining: 12 stub repos (re-audit when source lands) and the two coverage gaps — the per-client-org sweep (filed separately) and the `MokoSuiteHQ` missing `updates.xml`. Closing the MokoConsulting scope.
Sign in to join this conversation.