fix: resolve release blockers #97 (scalar JSON-LD 500) and #98 (no single-tag edit UI) #108

Merged
jmiller merged 2 commits from fix/release-blockers-97-98 into dev 2026-06-29 14:41:13 +00:00
Owner

Fixes the two release blockers found in the deep-dive audit.

#97 — Fatal frontend 500 from scalar custom JSON-LD

  • MokoOGContent::validateJson() now requires a JSON object/array — scalars (42, "x", true) that previously passed validation and were stored are rejected.
  • MokoOG render path guards with is_array($decoded) before writing @context, so any already-stored scalar payload can no longer crash the public page (defense-in-depth).

#98 — Missing single-tag create/edit admin UI

The form/model/table existed but had no controller/view/template, so the admin component was read-only.

  • New Controller/TagController (FormController), View/Tag/HtmlView, tmpl/tag/edit.php.
  • OG title in the list now links to the editor; New/Edit toolbar buttons added.
  • tmpl/tag folder declared in the manifest (so it ships).
  • tag.xml: cross-package PLG_CONTENT_* labels → COM_MOKOOG_*; content_type/content_id made editable + required (enables New); added a language field so the full unique key is controllable.
  • New COM_MOKOOG_* strings added to en-GB and en-US.

Bonus — #77

Corrected seo_title/meta_description form maxlength to match the DB columns (70 / 200) instead of 255, resolving the reopened maxlength issue.

Verification

All changed/new PHP pass php -l; tag.xml and mokoog.xml parse. Manual runtime test on Joomla still recommended (create + edit a tag, save a scalar into custom_schema and confirm no 500).

Closes #97, #98, #77.

🤖 Generated with Claude Code

Fixes the two release blockers found in the deep-dive audit. ## #97 — Fatal frontend 500 from scalar custom JSON-LD - `MokoOGContent::validateJson()` now requires a JSON **object/array** — scalars (`42`, `"x"`, `true`) that previously passed validation and were stored are rejected. - `MokoOG` render path guards with `is_array($decoded)` before writing `@context`, so any **already-stored** scalar payload can no longer crash the public page (defense-in-depth). ## #98 — Missing single-tag create/edit admin UI The form/model/table existed but had no controller/view/template, so the admin component was read-only. - New `Controller/TagController` (FormController), `View/Tag/HtmlView`, `tmpl/tag/edit.php`. - OG title in the list now links to the editor; **New**/**Edit** toolbar buttons added. - `tmpl/tag` folder declared in the manifest (so it ships). - `tag.xml`: cross-package `PLG_CONTENT_*` labels → `COM_MOKOOG_*`; `content_type`/`content_id` made editable + required (enables New); added a `language` field so the full unique key is controllable. - New `COM_MOKOOG_*` strings added to en-GB **and** en-US. ## Bonus — #77 Corrected `seo_title`/`meta_description` form `maxlength` to match the DB columns (70 / 200) instead of 255, resolving the reopened maxlength issue. ## Verification All changed/new PHP pass `php -l`; `tag.xml` and `mokoog.xml` parse. Manual runtime test on Joomla still recommended (create + edit a tag, save a scalar into custom_schema and confirm no 500). Closes #97, #98, #77. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jmiller added 2 commits 2026-06-29 14:36:20 +00:00
fix: resolve release blockers #97 (scalar JSON-LD 500) and #98 (no edit UI)
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 20s
8582a3eac5
#97 — Fatal frontend 500 from scalar custom_schema:
- MokoOGContent::validateJson() now requires a JSON object/array (rejects
  scalars like 42/"x"/true that previously passed and were stored)
- MokoOG render path guards with is_array($decoded) so already-stored
  scalar payloads can no longer crash the public page

#98 — Missing single-tag create/edit admin UI:
- Add Controller/TagController (FormController), View/Tag/HtmlView, tmpl/tag/edit.php
- Link OG title in the list to the editor; add New/Edit toolbar buttons
- Declare tmpl/tag folder in the component manifest
- tag.xml: switch cross-package PLG_CONTENT_* labels to COM_MOKOOG_* keys,
  make content_type/content_id editable+required (enables New), add language field
- Add the new COM_MOKOOG_* strings to en-GB and en-US

Also fixes #77 while here: seo_title/meta_description form maxlength now
match the DB columns (70/200) instead of 255.
chore(version): pre-release bump to 01.06.02-dev [skip ci]
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Branch Cleanup / Delete merged branch (pull_request) Failing after 1s
e6328a1e8d
jmiller merged commit 5b1fb1584e into dev 2026-06-29 14:41:13 +00:00
jmiller deleted branch fix/release-blockers-97-98 2026-06-29 14:41:13 +00:00
Sign in to join this conversation.
No Reviewers
Priority -
Type -
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MokoConsulting/MokoSuiteOpenGraph#108