Skip to content

fix(review): #1269 review findings — a missing CMDB sheet archives instead of deleting - #1305

Open
WilcoLouwerse wants to merge 5 commits into
developmentfrom
review/pr-1269-fixes
Open

WilcoLouwerse wants to merge 5 commits into
developmentfrom
review/pr-1269-fixes

Conversation

@WilcoLouwerse

Copy link
Copy Markdown

Summary

Fixes the review findings on the release PR #1269 (development → beta) that can be fixed in code. The release PR picks these up once this merges into development.

  • A workbook without one of the CMDB sheets no longer soft-deletes that sheet's applications (🔴 from the Release: merge development into beta #1269 review, A missing CMDB source sheet soft-deletes all its applications, silently #1304). The reader now returns the expected source sheets the workbook lacks (absentSheets). Such an import is not authoritative for a deletion, like one with an unreadable key: what is on no sheet is archived, never deleted, and the report warns that the sheet was not found. The REQ-CMDB-015 requirement and the feature docs describe the case.
  • Technical owner column of Applications in use shows the contact's name through the contactName widget, like the business owner column.
  • No trash wording without an archive sheet: the choice "Archive or delete them", its help text and the re-import line in the info panel read "Archive them" / "archived" when the profile names no archive sheet.
  • Parity file: screen.board is always a list, and the 41 decided-no rows have board: null with a reason. The file still validates against the parity-verify schema.
  • Docs: "Six limits are read from the profile", matching the table.

Left open

  • GEMMA facet counts ignore the provider narrowing from "View all": FacetController has no filter on arbitrary list keys, so forwarding the key from the frontend alone would not change the counts. That needs a backend filter, or hiding the sidebar while the list is pre-filtered. Cosmetic; the review marked it fine to leave for a later change.
  • The archive-reconciliation and mapping Playwright specs (tests/e2e/spec-coverage/cmdb-import.spec.ts, cmdb-import-mapping.spec.ts) still have to be run on a rig with the head of development before the release. Task 7's checkbox stays unticked until then.

Test plan

  • phpunit -c phpunit-unit.xml tests/Unit/Service/Cmdb tests/Unit/Service/CmdbExportImportServiceTest.php with OPENREGISTER_DIR set for PhpSpreadsheet: 268 tests green, including the new testAMissingSourceSheetArchivesInsteadOfDeleting and testAWorkbookWithSomeSourceSheetsNamesTheAbsentOnes
  • composer phpcs, phpmd (both rule sets, with the baseline), composer phpstan: clean
  • jest src/views/settings/sections/CmdbImport.spec.js src/utils/cmdbImport: 108 tests green
  • npm run check:manifest, npm run test:l10n, npm run check:l10n-js: clean
  • ESLint: not run locally (the local Node 20 lacks module.findPackageJSON, which @nextcloud/eslint-config needs); CI runs it
  • E2E on a rig (see above)

🤖 Generated with Claude Code

WilcoLouwerse and others added 5 commits October 16, 2026 13:41
…instead of deleting

The reader refused a workbook only when none of the profile's source sheets
was present, and the reconciliation treated the workbook as authoritative for
a deletion whenever the archive sheet was readable. A workbook that had
"Onbeh Applicaties CMDB" but not "Beheerde Applicaties CMDB" (a renamed sheet,
a partial export) therefore soft-deleted every application an earlier import
took from the missing sheet, on a plain re-import with the default
missingRecords=archive, and the report gave no reason.

The reader now returns the expected source sheets the workbook lacks
(absentSheets). An import with such a sheet is not authoritative for a
deletion, like one with an unreadable key: what is on no sheet is archived,
never deleted, and the report warns that the sheet was not found. The run
caches for unreadable keys and absent sheets are cleared with the others.

Fixes #1304

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… lists

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…uuid

technicalOwner is the same $ref contactPerson relation as businessOwner,
whose column #1292 gave the contactName widget; the technical owner column
still printed the key.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…chive sheet

The info paragraph already switched on the archive sheet, but the choice
"Archive or delete them", its help ("archived or moved to the trash") and
the re-import line ("archived or deleted") did not. Without an archive
sheet the import only archives, so these now read "Archive them" and
"archived" for such a profile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… why they have no screen

118 capabilities named their board as a string and 44 as a list, so a
reader iterating board walked a string character by character. Every board
is a list now, as in specScreens. The 41 decided-no rows had no screen at
all; they get board null with the reason that nothing was built.

The file still validates against the parity-verify capabilities schema.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/stackiq @ 755cac3

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
check-vue-demi ✅
test-l10n ✅
format ❌
check-schema-l10n ✅
check-l10n-js ✅
composer ✅ ✅ 133/133
npm ✅ ✅ 807/807
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ✅ 1428/1428 · 20 skipped
Newman ⏭️
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ✅

Quality workflow — 2026-10-16 12:00 UTC

Download the full PDF report from the workflow artifacts.

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant