Skip to content

feat(developer): set a display format label - #5445

Merged
natechadwick-intsof merged 2 commits into
mainfrom
feat/issue-5432-display-format-label
Oct 9, 2026
Merged

natechadwick-intsof merged 2 commits into
mainfrom
feat/issue-5432-display-format-label

Conversation

@natechadwick-intsof

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

Copy link
Copy Markdown
Collaborator

Summary

Developer can set the label of an existing display format on the current update. The save sends label only, so the name, description, columns, and communities stay. A blank label does not clear the name: an empty display name cannot be stored, so the catalog shows the name. Cancel and an unchanged label do not call the server. HTTP 400, 403, and 409 leave the previous label and do not show a saved notice.

Parent: #1690. Slice: #5432.

Fixes #5432

Operator: Grok: night-issue-prs (model grok-4.7)

Test plan

  1. Sign in as Admin and open Developer → Display formats.
  2. Open an existing format. Set display format label is present. A format that has not been created yet does not show it.
  3. Change the label and save. The detail and the catalog show the new label. Name, description, and columns stay.
  4. Save the same label again. The server is not called.
  5. Edit the label and cancel. The previous label stays.
  6. Clear the label and save. The name stays and the catalog shows the name.
  7. A 400, 403, or 409 response keeps the previous label and does not show Display format label saved.

Checklist

  • Product documentation — updated product-docs/8.2/admin/developer-display-formats.md (id admin-developer-display-formats)
  • Unit / module tests — JDBC label update, adaptor label-only and blank-echo and 403, Vitest label write and panel behavior; standalone clean install green
  • WebUI + Playwright — modules/perc-qa-automation/frontend/tests/developer-display-format-label.spec.js (1 passed on H2)
  • Build gates — system, projects/sitemanage, WebUI, and modules/perc-qa-automation standalone clean install. No public signature, final, or sealed change, so no reverse-dep install.
  • Cross-platform — no new filesystem path joins. SQL and REST paths use / as URL or SQL text.

Build evidence

modules_built: system, projects/sitemanage, WebUI, modules/perc-qa-automation

downstream_checked: none

JDK 21 (JAVA_HOME=/usr/lib/jvm/java-21-openjdk), rtk mvn clean install from each module directory. No skipTests.

  • cd system && rtk mvn clean install — Tests run: 3139, Failures: 0, Errors: 0, Skipped: 265. BUILD SUCCESS. Finished 2026-10-08T22:45:12-04:00. Total time 01:34 min.
  • cd projects/sitemanage && rtk mvn clean install — Tests run: 3845, Failures: 0, Errors: 0, Skipped: 125. BUILD SUCCESS. Finished 2026-10-08T22:47:18-04:00. Total time 38.245 s.
  • cd WebUI && rtk mvn clean install — Java Tests run: 69, Failures: 0, Errors: 0, Skipped: 0. Vitest Test Files 751 passed, Tests 7280 passed. BUILD SUCCESS. Finished 2026-10-08T22:49:41-04:00. Total time 01:55 min.
  • cd modules/perc-qa-automation && rtk mvn clean install — npm ci; No tests to run (surface proof is Playwright, not Surefire). BUILD SUCCESS. Finished 2026-10-08T22:50:13-04:00. Total time 1.749 s.

UI proof (H2 QA)

  • python3 docker/scripts/perc-devctl.py qa-up --skip-image-build — RESULT:OK. TEST_CMS_URL=http://127.0.0.1:9993. QA_CMS_HOST_PORT=9993. Container perc-matrix-cms-h2.
  • python3 docker/scripts/perc-devctl.py qa-health — RESULT:OK HTTP:200 HEALTH:healthy.
  • python3 docker/scripts/perc-devctl.py qa-deploy-war-jars --restart-jetty — copied perc-system-8.2.0-SNAPSHOT.jar and sitemanage-8.2.0-SNAPSHOT.jar into /opt/Percussion/jetty/base/webapps/Rhythmyx/WEB-INF/lib, then in-cell StopJetty/StartJetty. No docker restart of the cell.
  • qa-health again — RESULT:OK HTTP:200 HEALTH:healthy.
  • python3 docker/scripts/perc-devctl.py qa-deploy-webui — copied the built modern SPA. qa-health again — RESULT:OK HTTP:200 HEALTH:healthy.
  • cd modules/perc-qa-automation/frontend && rtk npm run test:surface -- --path tests/developer-display-format-label.spec.js with TEST_CMS_URL, ADMIN_USERNAME=Admin, ADMIN_PASSWORD from qa-up, TEST_DB_TYPE=h2, TEST_PRODUCT=cms.
  • Playwright: 1 passed (5.1s).
  • console-clean=yes (spec assertClean: no pageerror; console errors limited to the allowed 400/403/409, 404, bootstrap/googleFonts, and favicon noise, and none of those fired).
  • server.log-clean=yes (no ERROR or FATAL lines in /opt/Percussion/jetty/base/logs/server.log during the test window; log length 841 before, 843 after).
  • python3 docker/scripts/perc-devctl.py qa-down after the run.

Pre-push local code review

Erlang review — PR #5445

Scope

  • Persona: erlang 0.1.1
  • Persona source: /home/nate/.local/share/mkd/agents/erlang
  • Status: mkd-code-review 0.1.18, pack percussion, --gate advisory, --git-base origin/main
  • PR: feat(developer): set a display format label #5445
  • Base: origin/main
  • Head: 14395cd
  • Files analyzed: 13
  • Reviewer: independent Erlang (did not author the PR)

Independent reading

displayFormatLabelWrite sends { label } only. The same trimmed label is "unchanged" and does not PUT. Cancel does not write. savedDisplayFormatLabel rejects a response whose name, description, columns, or communities differ, and it rejects a sent body that includes those fields. A blank label is sent as "". applyDisplayFormatLabel stores the internal name when the label is blank, because PSDisplayFormat.setDisplayName rejects empty. The client accepts "" or that name and does not treat any other label as success. updateDisplayFormatLabel refuses a blank DISPLAYNAME. An overlong label is HTTP 400 from setDisplayName and does not save. HTTP 400, 403, and 409 restore the previous label and do not show Display format label saved. Vitest, the adaptor write test, the JDBC persist test, Playwright, and product-docs/8.2/admin/developer-display-formats.md are present. No new filesystem path joins. No rule files.

In-diff cognitive-complexity rows (handleSave, handleLabelSave, savedDisplayFormatLabel) are suggestions. Preexisting paths.hardcoded_sep rows in PSUiDesignWs are outside the label diff. The LLM stage failed open (Ollama CUDA out of memory). Neither blocks.

A case-only label change is a no-op in setDisplayName (equalsIgnoreCase returns before assign). The client then rejects the echo and keeps the previous label. That is not a data-loss bug.

Recommendation: approve. May merge: yes.

CLI stdout (mkd-code-review analyze --format markdown)

Summary

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

Scope

  • Base: origin/main
  • Head: HEAD
  • Files: 13 analyzed
  • In-diff: 3 finding(s); preexisting: 7
  • 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: system/webservices/src/com/percussion/webservices/ui/impl/PSUiDesignWs.java:686 (preexisting)
  • Rule: paths.hardcoded_sep
  • Tool: paths.hardcoded_sep
  • Pattern-id: paths.hardcoded-sep
  • Description: Possible non-portable path construction (line 686)
  • Suggestion: Use Path/PathBuf, path.join, File.separator, or pathSeparator — not literal / or \ joins.
  • Status: open

Issue 2 -- Severity: bug

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

Issue 3 -- Severity: bug

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

Issue 4 -- Severity: bug

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

Issue 5 -- Severity: bug

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

Issue 6 -- Severity: bug

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

Issue 7 -- Severity: suggestion

  • File: WebUI/src/main/ts/developer/DisplayFormatDetailPanel.tsx:339 (in-diff)
  • Rule: complexity.cognitive
  • Tool: arborist-metrics
  • Description: Function handleSave cognitive=11 (max 15), cyclomatic=17 (max 15)
  • Suggestion: Extract helpers, reduce nesting, use guard clauses (see CODE_STANDARDS).
  • Status: open

Issue 8 -- Severity: suggestion

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

Issue 9 -- Severity: suggestion

  • File: WebUI/src/main/ts/developer/DisplayFormatDetailPanel.tsx:519 (in-diff)
  • Rule: complexity.cognitive
  • Tool: arborist-metrics
  • Description: Function handleLabelSave cognitive=7 (max 15), cyclomatic=18 (max 15)
  • Suggestion: Extract helpers, reduce nesting, use guard clauses (see CODE_STANDARDS).
  • Status: open

Issue 10 -- Severity: suggestion

  • File: WebUI/src/main/ts/developer/displayFormatLabel.ts:125 (in-diff)
  • Rule: complexity.cognitive
  • Tool: arborist-metrics
  • Description: Function savedDisplayFormatLabel cognitive=17 (max 15), cyclomatic=16 (max 15)
  • Suggestion: Extract helpers, reduce nesting, use guard clauses (see CODE_STANDARDS).
  • Status: open

Issue 11 -- Severity: suggestion

  • File: review

  • Rule: llm.error

  • Tool: llm

  • Description: model ollama-dev-coder failed: http: status 500 Internal Server Error body {"error":{"message":"llama-server process has terminated: exit status 1: cudaMalloc failed: out of memory\nalloc_tensor_range: failed to allocate CUDA0 buffer of size 5064192000\nerror loading model: unable to allocate CUDA0 buffer","type":"api_error","param":null,"code":null}}

  • Status: open

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

A label-only save on PUT /services/displayformats/{idOrName} keeps the
name, description, and columns. A blank label stores the catalog name
so the name is not wiped. Cancel does not write. HTTP 400, 403, and 409
do not claim success.

Fixes #5432

> Co-Authored by Grok Build 1.0.46 using grok-4.7 with agent night-issue-prs.
Record the pre-merge mkd-code-review of the display-format label save.
In-diff findings are complexity suggestions. No blocking bugs.

> 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

LGTM. Independent Erlang review (persona erlang 0.1.1, mkd-code-review 0.1.18, pack percussion, gate advisory, base origin/main). Same-login APPROVE is rejected by GitHub, so this comment is the review. In-diff findings are complexity suggestions. Preexisting rows do not block. Ollama dev-coder failed open (CUDA out of memory). No blocking bugs. May merge: yes.

Report: docs/ai-generated/code-reviews/pr-5445-erlang.md

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

@natechadwick-intsof
natechadwick-intsof merged commit 48bbaa7 into main Oct 9, 2026
8 checks passed
@natechadwick-intsof
natechadwick-intsof deleted the feat/issue-5432-display-format-label branch October 9, 2026 03:59
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 1690 slice 100: Developer set a display format label

1 participant