Skip to content

fix(nav): let users reach Personal settings again - #1113

Merged
rubenvdlinde merged 2 commits into
developmentfrom
fix/app-chrome-personal-settings-reachable
Sep 3, 2026
Merged

rubenvdlinde merged 2 commits into
developmentfrom
fix/app-chrome-personal-settings-reachable

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

What this fixes

Both apps carried nav.includePersonalSettings: false with no note and nothing in its place. That flag turns off the entry CnAppNav auto-prepends at the top of the settings foldout.

That entry is not decoration. It opens CnAppRoot's NcAppSettingsDialog, whose #user-settings slot falls back to the user's notification preferences and renders the ADR-110 Integrations section below them. Suppressing it put both out of reach from inside the app entirely.

When the flag is correct

For an app that declares its own entry with action: "user-settings", which opens the same dialog. keepiq does exactly that and injects its own Session / Security / Encryption sections into the slot, so re-enabling the shell copy there would give it two entries onto one dialog. keepiq is right and is untouched.

Neither of these two declares such an entry, so the flag was only hiding a surface.

How it was found

Pointing gate-107 (ADR-114, the seven-item app chrome) at the fleet. Three apps set the flag; only keepiq had a replacement. The rule is added to the gate in ConductionNL/.github so this cannot recur, with keepiq's shape as the fixture's anti-widening control.

🤖 Generated with Claude Code

The manifest carried `nav.includePersonalSettings: false`, which turns off the
entry CnAppNav auto-prepends at the top of the settings foldout. There was no
note saying why, and nothing replaced it.

That entry is not decoration. It opens CnAppRoot's NcAppSettingsDialog, whose
`#user-settings` slot falls back to the user's NOTIFICATION PREFERENCES and
renders the ADR-110 Integrations section below them. Suppressing the entry put
both out of reach from inside the app entirely.

The flag is legitimate for an app that declares its own entry with
`action: "user-settings"`, which opens the same dialog: keepiq does exactly
that and injects its own Session / Security / Encryption sections into the
slot, so re-enabling the shell copy there would give it two entries onto one
dialog. This app declares no such entry, so the flag was simply hiding a
surface.

Found by pointing gate-107 (ADR-114, the seven-item app chrome) at the fleet:
three apps set this flag, and only keepiq had a replacement.
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/decidiq @ 9095437

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
check-nav-ceiling
test-l10n
format
check-l10n-js
check-schema-l10n
composer ✅ 104/104
npm ✅ 537/537
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development
Hydra gates

Quality workflow — 2026-09-03 11:32 UTC

Download the full PDF report from the workflow artifacts.

testSeamAndServiceCannotDiverge fails intermittently on `development`, and
every branch cut from it inherits the red. Observed 2026-09-03 on CI:

    'decidedAt' => '2026-09-03T11:30:08+00:00'   expected
    'decidedAt' => '2026-09-03T11:30:09+00:00'   actual

`decidedAt` is a wall-clock reading that each path stamps for itself. The two
calls run microseconds apart, so whenever they straddle a second boundary the
arrays differ by exactly one second and the test fails for a reason that has
nothing to do with the divergence it exists to catch.

NORMALISED rather than unset. Whether a decided stage records a decision time
at all IS part of what must not diverge, so both paths still have to agree that
there is one; they no longer have to agree on the second. Dropping the key
would have widened the test into passing over a path that stopped stamping it.

The sibling provenance fields (`id`, `decision`, `route`, `taskUuid`) were
already stripped for the same class of reason.
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/decidiq @ 7e59e2c

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
check-nav-ceiling
test-l10n
format
check-l10n-js
check-schema-l10n
composer ✅ 104/104
npm ✅ 537/537
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development
Hydra gates

Quality workflow — 2026-09-03 12:00 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde merged commit 607477e into development Sep 3, 2026
49 checks passed
@rubenvdlinde
rubenvdlinde deleted the fix/app-chrome-personal-settings-reachable branch September 3, 2026 12:13
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