Skip to content

feat(publish): edit the open site folder root (#5060) - #5069

Merged
natechadwick-intsof merged 4 commits into
mainfrom
fix/issue-5060-publish-folder-root
Oct 2, 2026
Merged

natechadwick-intsof merged 4 commits into
mainfrom
fix/issue-5060-publish-folder-root

Conversation

@natechadwick-intsof

@natechadwick-intsof natechadwick-intsof commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Parent: #4531. Slice #5060.

PublishingShell can edit the open site folder root. Save sends PUT /services/sites/{nameOrId} with name and folderRoot only. 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

  • Vitest: siteFolderRoot and SiteFolderRootPanel (save, remount, cancel, blank, unsafe, 400/403/409)
  • SitesAdaptorCreateUpdateDeleteTest folder-root persist, omit, 400, 409
  • Playwright surface on H2 QA: tests/publishing/siteFolderRoot.spec.js — 1 passed
  • Human QA: open Publish, edit a site folder root, confirm reload, cancel, and blank

Product documentation

  • Updated 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 ./mvnw is mode 644 so the root wrapper was used, no -am):

  • rtk mvn -pl rest clean install — BUILD SUCCESS. Tests run: 1585, Failures: 0
  • rtk mvn -pl projects/sitemanage clean install — BUILD SUCCESS. Tests run: 3200, Failures: 0, Errors: 0, Skipped: 125
  • rtk mvn -pl WebUI clean install — BUILD SUCCESS. Surefire Tests run: 69, Failures: 0. Vitest Test Files 602 passed, Tests 5519 passed

downstream_checked: projects/sitemanage standalone clean install compiles and tests against the new Site.folderRoot field. 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-h2
  • qa-health RESULT:OK HTTP:200 HEALTH:healthy
  • qa-deploy-war-jars --restart-jetty (perc-system, rest, sitemanage) then qa-health RESULT:OK
  • qa-deploy-webui then qa-health RESULT:OK
  • rtk npm run test:surface -- --path tests/publishing/siteFolderRoot.spec.js — 1 passed (3.5s)
  • console-clean=yes (spec asserts no pageerror/console error except expected 409)
  • server.log-clean=yes (no ERROR/FATAL in the test window)
  • qa-down RESULT:OK

Pre-push local code review

Re-review after erlang-fix 9696607715.

Summary

Machine analysis found 54 finding(s), 0 bug(s).

Scope

  • Base: origin/main
  • Head: HEAD
  • Files: 96 analyzed
  • In-diff: 0 finding(s); preexisting: 54
  • Persona: erlang 0.1.1
  • Persona source: /home/nate/.local/share/mkd/agents/erlang

Recommendation

approve

Gate

  • Blocking bugs: 0
  • May commit/push: yes

Issues

Issue 1 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:271 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 271)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 2 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:274 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 274)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 3 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:423 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 423)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 4 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:532 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 532)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 5 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:656 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 656)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 6 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:659 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 659)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 7 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:744 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 744)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 8 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:841 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 841)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 9 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:851 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 851)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 10 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:857 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 857)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 11 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:876 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 876)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 12 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:877 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 877)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 13 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:1047 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 1047)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 14 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:1319 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 1319)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 15 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:1418 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 1418)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 16 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:1765 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 1765)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 17 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:1835 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 1835)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 18 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:1837 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 1837)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 19 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:1871 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 1871)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 20 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/sitemanage/service/impl/PSSitePublishService.java:551 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 551)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 21 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/sitemanage/service/impl/PSSitePublishService.java:758 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 758)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 22 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/sitemanage/service/impl/PSSitePublishService.java:779 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 779)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 23 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/sitemanage/service/impl/PSSitePublishService.java:806 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 806)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 24 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/sitemanage/service/impl/PSSitePublishService.java:808 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 808)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 25 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/sitemanage/service/impl/PSSitePublishService.java:1139 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 1139)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 26 -- Severity: bug

  • File: system/src/main/java/com/percussion/fastforward/managednav/PSManagedNavService.java:466 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 466)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 27 -- Severity: bug

  • File: system/src/main/java/com/percussion/fastforward/managednav/PSManagedNavService.java:1390 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 1390)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 28 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-rename-folder.spec.js:107 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 107)
  • Status: open

Issue 29 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-rename-folder.spec.js:122 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 122)
  • Status: open

Issue 30 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-rename-folder.spec.js:256 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 256)
  • Status: open

Issue 31 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-rx-folder-mutations.spec.js:85 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 85)
  • Status: open

Issue 32 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-rx-folder-mutations.spec.js:289 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 289)
  • Status: open

Issue 33 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-translations.spec.js:71 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 71)
  • Status: open

Issue 34 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-translations.spec.js:111 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 111)
  • Status: open

Issue 35 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-translations.spec.js:113 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 113)
  • Status: open

Issue 36 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-translations.spec.js:116 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 116)
  • Status: open

Issue 37 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-translations.spec.js:130 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 130)
  • Status: open

Issue 38 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-translations.spec.js:132 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 132)
  • Status: open

Issue 39 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-translations.spec.js:137 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 137)
  • Status: open

Issue 40 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-translations.spec.js:293 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 293)
  • Status: open

Issue 41 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-translations.spec.js:353 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 353)
  • Status: open

Issue 42 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-translations.spec.js:355 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 355)
  • Status: open

Issue 43 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-translations.spec.js:385 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 385)
  • Status: open

Issue 44 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-translations.spec.js:585 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 585)
  • Status: open

Issue 45 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-translations.spec.js:587 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 587)
  • Status: open

Issue 46 -- Severity: bug

  • File: modules/perc-qa-automation/frontend/tests/explorer-translations.spec.js:716 (preexisting)
  • Rule: patterns.hard_gate
  • Tool: patterns
  • Pattern-id: tests.empty-catch
  • Description: Empty catch block swallows failures (line 716)
  • Status: open

Issue 47 -- Severity: bug

  • File: WebUI/src/main/ts/contentExplorer/actionDispatch.ts:1691 (preexisting)
  • Rule: complexity.cognitive
  • Tool: arborist-metrics
  • Description: Function dispatchAction cognitive=338 (max 15), cyclomatic=209 (max 15)
  • Suggestion: Extract helpers, reduce nesting, use guard clauses (see CODE_STANDARDS).
  • Status: open

Issue 48 -- Severity: bug

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:760 (preexisting)
  • Rule: complexity.cognitive
  • Tool: arborist-metrics
  • Description: Function updateSectionInfo cognitive=47 (max 15), cyclomatic=14 (max 15)
  • Suggestion: Extract helpers, reduce nesting, use guard clauses (see CODE_STANDARDS).
  • Status: open

Issue 49 -- Severity: suggestion

  • File: WebUI/src/main/ts/developer/SlotDetailPanel.tsx:386 (preexisting)
  • Rule: complexity.cognitive
  • Tool: arborist-metrics
  • Description: Function handleSave cognitive=16 (max 15), cyclomatic=20 (max 15)
  • Suggestion: Extract helpers, reduce nesting, use guard clauses (see CODE_STANDARDS).
  • Status: open

Issue 50 -- Severity: suggestion

  • File: deployer/src/main/java/com/percussion/deployer/server/dependencies/PSExitDefDependencyHandler.java:109 (preexisting)
  • Rule: complexity.cognitive
  • Tool: arborist-metrics
  • Description: Function getDependencyFiles cognitive=19 (max 15), cyclomatic=11 (max 15)
  • Suggestion: Extract helpers, reduce nesting, use guard clauses (see CODE_STANDARDS).
  • Status: open

Issue 51 -- Severity: suggestion

  • File: deployer/src/main/java/com/percussion/deployer/server/dependencies/PSExitDefDependencyHandler.java:176 (preexisting)
  • Rule: complexity.cognitive
  • Tool: arborist-metrics
  • Description: Function installDependencyFiles cognitive=19 (max 15), cyclomatic=16 (max 15)
  • Suggestion: Extract helpers, reduce nesting, use guard clauses (see CODE_STANDARDS).
  • Status: open

Issue 52 -- Severity: suggestion

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/FolderAdaptor.java:479 (preexisting)
  • Rule: complexity.cognitive
  • Tool: arborist-metrics
  • Description: Function extractSectionInfo cognitive=17 (max 15), cyclomatic=7 (max 15)
  • Suggestion: Extract helpers, reduce nesting, use guard clauses (see CODE_STANDARDS).
  • Status: open

Issue 53 -- Severity: suggestion

  • File: projects/sitemanage/src/main/java/com/percussion/apibridge/SlotsAdaptor.java:200 (preexisting)
  • Rule: complexity.cognitive
  • Tool: arborist-metrics
  • Description: Function updateSlot cognitive=22 (max 15), cyclomatic=19 (max 15)
  • Suggestion: Extract helpers, reduce nesting, use guard clauses (see CODE_STANDARDS).
  • Status: open

Issue 54 -- Severity: suggestion

  • File: projects/sitemanage/src/main/java/com/percussion/sitemanage/service/impl/PSSitePublishService.java:1009 (preexisting)
  • Rule: complexity.cognitive
  • Tool: arborist-metrics
  • Description: Function unapproveQueuedIncrementalContent cognitive=16 (max 15), cyclomatic=17 (max 15)
  • Suggestion: Extract helpers, reduce nesting, use guard clauses (see CODE_STANDARDS).
  • Status: open

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 findAllSites throws or returns null) is fixed:
SitesAdaptor.rejectFolderRootConflict throws HTTP 503 and does not call saveSite.
Tests update_folderRoot_whenSiteListFails_503 and update_folderRoot_whenSiteListNull_503 cover both paths.
The panel catch path does not set the saved notice for any rejected updateSite, including 503 (generic error copy).
Recommendation: approve.

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.
@natechadwick-intsof natechadwick-intsof added operator:grok Changes authored by Grok operator:night-issue-prs night-issue-prs workflow model:grok-4.7 Session model grok-4.7 labels Oct 2, 2026
> Co-Authored by Grok Build 1.0.46 using grok-4.7 with agent night-issue-prs-erlang.
@natechadwick-intsof

Copy link
Copy Markdown
Collaborator Author

BLOCK — do not merge.

projects/sitemanage/src/main/java/com/percussion/apibridge/SitesAdaptor.java:1364 and :1368: rejectFolderRootConflict returns when siteManager.findAllSites() throws or returns null. updateSite then still stores folderRoot, so a failed uniqueness check is reported as success and two sites can share a path without HTTP 409.

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.

Co-Authored by Grok Build 1.0.46 using grok-4.7 with agent night-issue-prs-erlang.

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.
@natechadwick-intsof

Copy link
Copy Markdown
Collaborator Author

Erlang re-review (after 9696607)

LGTM. mkd-code-review 0.1.18, persona erlang 0.1.1, base origin/main, head HEAD.

  • In-diff findings: 0. Preexisting path/complexity rows do not block.
  • Prior block is fixed: rejectFolderRootConflict returns HTTP 503 when findAllSites throws or is null, and does not save the folder root (SitesAdaptorCreateUpdateDeleteTest 503 cases).
  • Panel catch path does not show a saved notice on a rejected update.

Full report is in the PR body under Pre-push local code review and in docs/ai-generated/code-reviews/pr-5069-erlang.md (bed456340f).

Co-Authored by Grok Build 1.0.46 using grok-4.7 with agent night-issue-prs-erlang.

@natechadwick-intsof
natechadwick-intsof enabled auto-merge (squash) October 2, 2026 08:02
@natechadwick-intsof
natechadwick-intsof merged commit f7521f7 into main Oct 2, 2026
8 checks passed
@natechadwick-intsof
natechadwick-intsof deleted the fix/issue-5060-publish-folder-root branch October 2, 2026 08:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

model:grok-4.7 Session model grok-4.7 operator:grok Changes authored by Grok operator:night-issue-prs night-issue-prs workflow

Projects

None yet

Development

Successfully merging this pull request may close these issues.

issue 4531 slice 59: PublishingShell edit the open site folder root

1 participant