Skip to content

fix: Show the Content app on the My Workspace content page EXO-91419 - #4293

Merged
MayTekayaa merged 1 commit into
feature/maintenancefrom
exo-91419
Oct 16, 2026
Merged

MayTekayaa merged 1 commit into
feature/maintenancefrom
exo-91419

Conversation

@MayTekayaa

@MayTekayaa MayTekayaa commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Symptom: on a new platform, My Workspace > More > Content (the global site page news) displays an empty page instead of the Content app.

Cause: the global/news page in pages.xml was made only of the top-news-container, news-container and bottom-news-container add-on containers. Their only contribution was the Content repository's former News portlet, which has been removed, so nothing fills the page.

Fix: the containers are replaced by the content/ContentListView portlet declared directly in the page. The global site is imported in insert mode, so the change reaches only new installs; a LayoutUpgradePlugin entry (GlobalNewsPageContentListUpgrade, content profile, run once) re-imports the news page in merge mode on existing instances. No automated test covers these descriptors.

Depends on Meeds-io/portal#1338, to merge after it. The upgrade's save evicts the page from CachePageStorage inside the upgrade's transaction, before the commit; social's asynchronous PageSavedIndexingListener reacts to the page update with LayoutService.getPage, reloads the previous committed page and caches it, so the restart that runs the upgrade keeps serving the empty containers until the next restart. portal#1338 evicts the page caches again once the transaction completes. Checked on a local server restored to a database whose global/news still holds the three containers, restarted once with this PR's sites.war: without portal#1338 the upgrade runs and stores the new page, while /layout/rest/pages/layout?pageRef=portal::global::news still returns the three addonContainers; with portal#1338's jars it returns the content/ContentListView window.

Upgrade impact:

  • On existing instances, merge replaces the whole stored global/news page with its shipped definition: an administrator's layout changes, or narrowed access or edit permissions, on that page are reset and must be re-applied.
  • The top-news-container, news-container and bottom-news-container add-on containers no longer exist on that page: a customer dynamic-container-configuration.xml that contributes to them no longer renders there.

Knowledge: Meeds-io/eng-standards#488, Meeds-io/eng-standards#492

This change is classified N1 (upgrade plugin rewriting persisted page data, page permissions included), computed at 23586c4 — its approver must be an Archi/Dev who knows it is N1, not an approval on AI review alone; author ≠ approver.

🤖 Generated with Claude Code

The global news page was built from add-on containers whose only
contribution was removed, so the page rendered empty. Declare the
Content list portlet directly in the page and upgrade the existing
page on running instances.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the partialCIBuild Perform Partial CI Build label Oct 15, 2026
@MayTekayaa
MayTekayaa requested a review from ahamdi October 15, 2026 14:39
@sonarqubecloud

Copy link
Copy Markdown

@ahamdi ahamdi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI review — Round #1

No blocking defect in the descriptors. One open point on the upgrade evidence, inline.

Verified conform

  • The cause is confirmed. content 7ecb1a661 (EXO-89233, on develop and feature/maintenance) deleted conf/news/dynamic-container-configuration.xml, which held the only news-container contribution (news-portlet). No other repo here contributes to top-news-container, news-container or bottom-news-container (grepped content, social, layout, notes, meeds and platform-private-distributions on develop and feature/maintenance). That leaves these three containers empty, and no other host in meeds declares a news container.
  • The portlet exists and is declared the same way as its sibling. content/ContentListView is declared in content's portlet.xml and portlet-instances.json on feature/maintenance. The window is identical to the one #4274 shipped on mycraft/contents: no preferences, and ContentListViewPortlet creates its applicationId and setting on first render.
  • The profiles line up. The page and the upgrade entry are both profiles="content", so neither applies without the content add-on.
  • The upgrade entry is safe. It uses importMode=merge, never overwrite, so only news is replaced and the other global pages are untouched (pitfall LayoutUpgradePlugin applies one importMode to three importers). It has a new execute-once name. Its shape matches the sibling global-page entries (MyTeamPageLayoutUpgrade, war:/conf/sites/, product.group.id org.exoplatform.social), and it is synchronous because it does not set plugin.upgrade.async.execution. LayoutUpgradePlugin overrides only the two-argument shouldProceedToUpgrade, so the base run-once and version gates still apply. On a fresh install it also runs (commons sets proceedUpgradeWhenFirstRun to ${commons.upgrade.proceedIfFirstRun:true} in upgrade-configuration.xml, and meeds does not override it), but it only re-imports the same news definition the startup import just created, so nothing changes.
  • The upgrade impact is complete. merge replaces the whole stored page with its shipped definition (*:/platform/users / manager:/platform/administrators), and the three containers disappear from it. These are the two outcomes that change for an existing instance, and the body lists both.
  • The Knowledge: line is valid. Meeds-io/eng-standards#488 is open and carries a meeds.md change with its fragment. #492 is a draft that carries the new pitfall ledger file. Both are for EXO-91419.

The body is unusually honest: it names the import mode, what the upgrade resets, and what the author could not explain. The fix also follows the existing #4274 pattern instead of reviving the add-on container.

This change is classified N1 (an upgrade plugin that rewrites persisted page data, page permissions included). Its approver must be an Architect/Developer who knows it is N1, not an approval on AI review alone; author ≠ approver.

🤖 Generated with Claude Code

@ahamdi

ahamdi commented Oct 15, 2026

Copy link
Copy Markdown
Member

AI review — Round #2 (final)

# Finding Status
1 🟡 No evidence that existing instances get the Content app after the upgrade's own restart ✅ Explained and verified. A page-cache reload race outside this PR, fixed by Meeds-io/portal#1338. Single-restart runs at 23586c42 were reported with and without #1338, and the body declares the dependency.

The head is unchanged (23586c42). Only the body changed: it adds the dependency paragraph. I checked that paragraph against portal feature/maintenance and #1338 at d9a953a5ca (details in the thread).

All findings from previous rounds are resolved, nothing outstanding from the AI review side.

Merge order: after Meeds-io/portal#1338. Merged on its own, the upgrade still runs and stores the new page, but existing instances keep showing the empty page until a second restart. This review does not cover #1338, which is a separate N1 PR with its own reviewer.

This change is classified N1 (an upgrade plugin that rewrites persisted page data, page permissions included). Its approver must be an Architect/Developer who knows it is N1, not an approval on AI review alone; author ≠ approver.

🤖 Generated with Claude Code

@MayTekayaa
MayTekayaa merged commit e632e20 into feature/maintenance Oct 16, 2026
19 checks passed
@MayTekayaa
MayTekayaa deleted the exo-91419 branch October 16, 2026 08:07
@ahamdi

ahamdi commented Oct 16, 2026

Copy link
Copy Markdown
Member

Heads-up: this PR merged before Meeds-io/portal#1338, which is still open.

Until #1338 lands on feature/maintenance, an upgraded instance (the maintenance ACC included) runs GlobalNewsPageContentListUpgrade once and stores the new page. It still serves the cached three add-on containers until its next restart. The stored data is right and nothing has to be re-run: a second restart, or deploying #1338, shows the Content app.

If you test EXO-91419 on the ACC before #1338 lands, restart once more after the upgrade before checking My Workspace > More > Content.

🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

partialCIBuild Perform Partial CI Build

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants