Repository navigation
feat(publish): edit the open site folder root (#5060) - #5069
Conversation
Save a non-blank CMS folder path on the site record from PublishingShell. Cancel, a blank or unsafe path, and HTTP 400/403/409 do not claim success. > Co-Authored by Grok Build 1.0.46 using grok-4.7 with agent night-issue-prs.
> Co-Authored by Grok Build 1.0.46 using grok-4.7 with agent night-issue-prs-erlang.
|
BLOCK — do not merge.
Fail closed: do not write the folder root when the site list cannot be read, and add a test that a list failure does not persist the path. Machine CLI (advisory) reported 0 findings and does not see this. CI snapshot at review start also had Analyze (java-kotlin), Analyze (javascript-typescript), and product-docs build smoke still IN_PROGRESS.
|
rejectFolderRootConflict now returns 503 when the site list throws or is null, so updateSite does not save an unverified folderRoot. > Co-Authored by Grok Build 1.0.46 using grok-4.7 with agent night-issue-prs-erlang-fix.
CLI report after the folder-root uniqueness fail-closed fix. In-diff bugs: 0. > Co-Authored by Grok Build 1.0.46 using grok-4.7 with agent night-issue-prs-erlang.
Erlang re-review (after 9696607)LGTM.
Full report is in the PR body under Pre-push local code review and in
|
Summary
Parent: #4531. Slice #5060.
PublishingShell can edit the open site folder root. Save sends
PUT /services/sites/{nameOrId}withnameandfolderRootonly. The workspace shows the saved path after success and after reopening the site. The value is the path stored on the site record; it does not create the folder or move items.Cancel, an unchanged path, a blank path, and an unsafe path (no leading
/, empty/./..segments) do not call PUT and do not show a saved notice. HTTP 400, 403, and 409 stay on the form. A path already used by another site is 409.Operator: Grok: night-issue-prs (model grok-4.7)
Fixes #5060
Test plan
siteFolderRootandSiteFolderRootPanel(save, remount, cancel, blank, unsafe, 400/403/409)SitesAdaptorCreateUpdateDeleteTestfolder-root persist, omit, 400, 409tests/publishing/siteFolderRoot.spec.js— 1 passedProduct documentation
product-docs/8.2/admin/publishing.md(Edit the open site folder root)Maven (C3)
modules_built: rest, projects/sitemanage, WebUI
From the worktree root (
rtk mvn -pl <module> clean install; module./mvnwis mode 644 so the root wrapper was used, no-am):rtk mvn -pl rest clean install— BUILD SUCCESS. Tests run: 1585, Failures: 0rtk mvn -pl projects/sitemanage clean install— BUILD SUCCESS. Tests run: 3200, Failures: 0, Errors: 0, Skipped: 125rtk mvn -pl WebUI clean install— BUILD SUCCESS. Surefire Tests run: 69, Failures: 0. Vitest Test Files 602 passed, Tests 5519 passeddownstream_checked: projects/sitemanage standalone clean install compiles and tests against the new
Site.folderRootfield. No existing method signatures were changed and no type was made final. perc-qa-automation is a Playwright spec only (no Maven module change).UI proof (C5)
python3 docker/scripts/perc-devctl.py qa-up— RESULT:OK, TEST_CMS_URL=http://127.0.0.1:9993, container perc-matrix-cms-h2qa-healthRESULT:OK HTTP:200 HEALTH:healthyqa-deploy-war-jars --restart-jetty(perc-system, rest, sitemanage) thenqa-healthRESULT:OKqa-deploy-webuithenqa-healthRESULT:OKrtk npm run test:surface -- --path tests/publishing/siteFolderRoot.spec.js— 1 passed (3.5s)qa-downRESULT:OKPre-push local code review
Re-review after erlang-fix
9696607715.Summary
Machine analysis found 54 finding(s), 0 bug(s).
Scope
Recommendation
approve
Gate
Issues
Issue 1 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 2 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 3 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 4 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 5 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 6 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 7 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 8 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 9 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 10 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 11 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 12 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 13 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 14 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 15 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 16 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 17 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 18 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 19 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 20 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 21 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 22 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 23 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 24 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 25 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 26 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 27 -- Severity: bug
paths.hardcoded_seppaths.hardcoded_sepIssue 28 -- Severity: bug
patterns.hard_gatepatternsIssue 29 -- Severity: bug
patterns.hard_gatepatternsIssue 30 -- Severity: bug
patterns.hard_gatepatternsIssue 31 -- Severity: bug
patterns.hard_gatepatternsIssue 32 -- Severity: bug
patterns.hard_gatepatternsIssue 33 -- Severity: bug
patterns.hard_gatepatternsIssue 34 -- Severity: bug
patterns.hard_gatepatternsIssue 35 -- Severity: bug
patterns.hard_gatepatternsIssue 36 -- Severity: bug
patterns.hard_gatepatternsIssue 37 -- Severity: bug
patterns.hard_gatepatternsIssue 38 -- Severity: bug
patterns.hard_gatepatternsIssue 39 -- Severity: bug
patterns.hard_gatepatternsIssue 40 -- Severity: bug
patterns.hard_gatepatternsIssue 41 -- Severity: bug
patterns.hard_gatepatternsIssue 42 -- Severity: bug
patterns.hard_gatepatternsIssue 43 -- Severity: bug
patterns.hard_gatepatternsIssue 44 -- Severity: bug
patterns.hard_gatepatternsIssue 45 -- Severity: bug
patterns.hard_gatepatternsIssue 46 -- Severity: bug
patterns.hard_gatepatternsIssue 47 -- Severity: bug
complexity.cognitivearborist-metricsdispatchActioncognitive=338 (max 15), cyclomatic=209 (max 15)Issue 48 -- Severity: bug
complexity.cognitivearborist-metricsupdateSectionInfocognitive=47 (max 15), cyclomatic=14 (max 15)Issue 49 -- Severity: suggestion
complexity.cognitivearborist-metricshandleSavecognitive=16 (max 15), cyclomatic=20 (max 15)Issue 50 -- Severity: suggestion
complexity.cognitivearborist-metricsgetDependencyFilescognitive=19 (max 15), cyclomatic=11 (max 15)Issue 51 -- Severity: suggestion
complexity.cognitivearborist-metricsinstallDependencyFilescognitive=19 (max 15), cyclomatic=16 (max 15)Issue 52 -- Severity: suggestion
complexity.cognitivearborist-metricsextractSectionInfocognitive=17 (max 15), cyclomatic=7 (max 15)Issue 53 -- Severity: suggestion
complexity.cognitivearborist-metricsupdateSlotcognitive=22 (max 15), cyclomatic=19 (max 15)Issue 54 -- Severity: suggestion
complexity.cognitivearborist-metricsunapproveQueuedIncrementalContentcognitive=16 (max 15), cyclomatic=17 (max 15)Erlang addendum (re-review after 9696607)
Persona: erlang 0.1.1. In-diff findings: 0. Preexisting rows do not block.
Previous block (fail-open when
findAllSitesthrows or returns null) is fixed:SitesAdaptor.rejectFolderRootConflictthrows HTTP 503 and does not callsaveSite.Tests
update_folderRoot_whenSiteListFails_503andupdate_folderRoot_whenSiteListNull_503cover both paths.The panel catch path does not set the saved notice for any rejected
updateSite, including 503 (generic error copy).Recommendation: approve.