Skip to content

fix(install): run the twelve seed steps on a FRESH install, not only on upgrade - #824

Merged
rubenvdlinde merged 1 commit into
developmentfrom
feature/install-repair-hook
Aug 12, 2026
Merged

fix(install): run the twelve seed steps on a FRESH install, not only on upgrade#824
rubenvdlinde merged 1 commit into
developmentfrom
feature/install-repair-hook

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Procest declared no <install> block, so on a fresh instance the register was never imported and not one of the twelve seed steps ran — no ZGW mappings, no bezwaar/beroep data, no LHS or VTH matrices, no workflow templates.

Why post-migration never runs on a first install

\OC\Installer::installAppLastSteps guards both pre- and post-migration with if ($previousVersion !== ""), and $previousVersion is "" on a first install ($ms->migrate("latest", true)migrateSchemaOnly()). Only <install> runs unconditionally. The upgrade path runs pre/post-migration and not install, so both blocks are needed, with idempotent steps.

Added (13 baseline creators)

InitializeSettings, LoadDefaultZgwMappings, SeedBezwaarBeroepData, SeedBezwaarWorkflowDefinition, SeedBesluitvormingTemplates, RegisterOriRegister, SeedLhsMatrix, SeedVthMatrixCells, SeedVthWorkflowTemplates, VthSeedDataRepairStep, SeedDeadlineMonitoringData, SeedKccWerkplekData, SeedVerwerkingsactiviteiten

All verified idempotent from their own docblocks before inclusion.

Deliberately excluded

step why not
MigrateWorkflowDefinitions one-way migration
RenameDutchDeadlineColumns rename over existing rows
MigrateArchivalToOpenRegister one-way migration
BackfillInformatieobjectMetadata backfill over existing documents
LinkInFlightContractDecisionsRepair, LinkInFlightRemainingDecisionsRepair link in-flight decisions; none exist on a new instance

<install> sits after </post-migration> per the info.xsd sequence, verified against the schema.

Part of a sweep; openconnector and shillinq already carry this block.

🤖 Generated with Claude Code

Nextcloud runs migrateSchemaOnly() on a first install: $previousVersion is
'', so Installer::installAppLastSteps() skips BOTH pre-migration and
post-migration, and <install> is the only unconditional hook. The upgrade
path runs pre/post-migration and NOT install, so an app needs both blocks
carrying the same baseline steps, each idempotent.

Until now this app declared no <install> block at all, so the Procest register and twelve seed steps
never arrived on a fresh instance.

Only baseline-CREATING steps are added; migrations, backfills, renames and
cross-app ingests stay upgrade-only so they never run against an empty
database. <install> is placed after </post-migration> per the info.xsd
sequence (pre-migration, post-migration, live-migration, install, uninstall),
verified against the schema.
@rubenvdlinde
rubenvdlinde merged commit 17cd4e1 into development Aug 12, 2026
29 of 35 checks passed
@rubenvdlinde
rubenvdlinde deleted the feature/install-repair-hook branch August 12, 2026 19:11
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/procest @ aefc0e0

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
check-vue3-compile
test-l10n
composer ✅ 100/100
npm ✅ 552/552
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman ⏭️
Playwright
Hydra gates

Quality workflow — 2026-08-12 19:37 UTC

Download the full PDF report from the workflow artifacts.

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