Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
edf8538
feat(vault): secret details in a right sidebar over the list
remko48 Aug 27, 2026
c12eb9d
l10n: detail-sidebar strings in every required locale
remko48 Aug 27, 2026
58082c6
fix(nav): highlight only the "..." node when its hidden folder is open
remko48 Aug 27, 2026
0f69672
feat(vault): show a loading state while switching folders
remko48 Aug 27, 2026
17988a7
l10n: translate the English-copied strings across all locales
remko48 Aug 27, 2026
2e88165
fix(l10n): translate the secret-type labels everywhere they render
remko48 Aug 27, 2026
b5d5cbf
fix(security): remove the dev auto-unlock block that slipped into the…
remko48 Aug 28, 2026
20c5f90
feat(vault): fleet selection with a contextual strip, vault strip, to…
remko48 Aug 28, 2026
e2836c7
fix(nav): the "…" node carries the selection for any folder below the…
remko48 Aug 28, 2026
41ca063
fix(icons): draw the lock shackle as a filled outline in every app icon
remko48 Aug 28, 2026
7b35245
Merge remote-tracking branch 'origin/development' into feature/fronte…
remko48 Aug 28, 2026
3e065f1
style(vault): no blank line after the crumbs custom property
remko48 Aug 28, 2026
80697d6
fix(quality): satisfy the four failing hydra gates
remko48 Aug 31, 2026
8d262a8
chore(deps): bump @conduction/nextcloud-vue to 2.27.0
remko48 Aug 31, 2026
0981d06
style(sidebar): overflow-wrap instead of the deprecated word-break ke…
remko48 Aug 31, 2026
74aa389
Merge remote-tracking branch 'origin/development' into feature/fronte…
remko48 Aug 31, 2026
1a75ee9
chore(release): sync beta back into development
github-actions[bot] Aug 31, 2026
e1b7cda
fix(kpi): drop hardcoded KPI colours so the cards follow the theme (#…
rubenvdlinde Aug 31, 2026
0a1e714
fix(composer): declare ext-xsl so dependabot can resolve (#559)
rubenvdlinde Aug 31, 2026
8825da3
Merge pull request #561 from ConductionNL/sync/beta-to-development-0.…
rubenvdlinde Aug 31, 2026
d5230eb
chore(deps): take @conduction/nextcloud-vue 2.27.2 (#567)
rubenvdlinde Aug 31, 2026
303e601
feat(vault): detail sidebar, role-grouped toolbar and fleet-style sel…
remko48 Aug 31, 2026
4f31612
fix(e2e): click the button inside the Move action, not its li wrapper…
rubenvdlinde Aug 31, 2026
2ae918f
chore(release): 0.2.6-unstable.20260831135900 (#572)
github-actions[bot] Aug 31, 2026
76a9d6d
fix(sidebar): address PR #479 review feedback
remko48 Aug 31, 2026
cc09874
fix(attachments): refetch when the open secret changes
remko48 Aug 31, 2026
759edc1
fix(vault): retire a secret's plaintext when the sidebar loads anothe…
rubenvdlinde Aug 31, 2026
f95ec8f
fix(deps): make the npm overrides follow their direct dependency (#575)
rubenvdlinde Aug 31, 2026
78b88be
test(unit): wait for the async call instead of a single macrotask tic…
rubenvdlinde Aug 31, 2026
76156b2
chore(release): 0.2.7-unstable.20260831194123 (#579)
github-actions[bot] Aug 31, 2026
6bb6eef
chore(register): retire the scaffold example schema (#580)
rubenvdlinde Aug 31, 2026
0a44a8a
chore(release): 0.2.8-unstable.20260831212628 (#581)
github-actions[bot] Sep 1, 2026
185deaa
l10n(walkthrough): translate the getting-started tour into all locales
remko48 Sep 1, 2026
e225828
feat(router): move keepiq off hash routing to clean path URLs (#582)
rubenvdlinde Sep 1, 2026
f5577ff
fix(e2e): match nav links and URLs as paths, not hashes (#584)
rubenvdlinde Sep 1, 2026
0f3c596
feat(folders): persist per-folder custom icon and color
remko48 Sep 1, 2026
9c1cd5e
feat(vault): per-vault icon and color, Proton-style, picked in the va…
remko48 Sep 1, 2026
b1e9d36
feat(vault): render vault icons and colors in the rail and list, with…
remko48 Sep 1, 2026
1c6266b
l10n(vault): Stage-9 strings across all locales
remko48 Sep 1, 2026
a231112
chore(lint): let the linter see tests/ and scripts/ (#585)
rubenvdlinde Sep 1, 2026
62488be
fix(vault): selected rail entries render plain contrast glyphs
remko48 Sep 1, 2026
992b6e6
Merge remote-tracking branch 'origin/development' into feature/fronte…
remko48 Sep 1, 2026
f2ef7fb
fix(e2e): make the suite load again after the lint sweep (#590)
rubenvdlinde Sep 1, 2026
dfe1f3e
fix(vault): selected vaults keep their color on an opaque theme disc
remko48 Sep 1, 2026
c41cf3d
chore(deps): take @conduction/nextcloud-vue 2.29.0
remko48 Sep 1, 2026
43bed6b
fix(e2e): navigate the router, not the URL fragment (#596)
rubenvdlinde Sep 1, 2026
fc2a9ee
fix(quality): satisfy phpcs and phpmd on the Stage-9 backend
remko48 Sep 1, 2026
e4076e2
refactor(nav): extract the empty-vault delete confirm into its own di…
remko48 Sep 1, 2026
7a79b23
style(quality): prettier formatting and @spec anchors for the Stage-9…
remko48 Sep 1, 2026
f387483
fix(quality): mark the AttachmentPanel secretId watcher @spec exclude
remko48 Sep 1, 2026
47d74ae
fix(quality): give the Stage-9 migration's suppression a written reason
remko48 Sep 1, 2026
40bf664
fix(attachments): drop a superseded list response instead of showing …
remko48 Sep 1, 2026
c1e3385
Merge pull request #591 from ConductionNL/feature/frontend-improvements
remko48 Sep 2, 2026
e03286b
fix(secrets): confirm before deleting a secret from the detail sidebar
remko48 Sep 2, 2026
c36d34d
fix(secrets): freeze a secret's type after creation
remko48 Sep 2, 2026
280b068
fix(secrets): keep the folder filter when the list refreshes
remko48 Sep 2, 2026
31316a6
refactor(dialogs): one move dialog and one destination picker
remko48 Sep 2, 2026
0d1012f
refactor(bulk): move the bulk-move target onto the shared picker
remko48 Sep 2, 2026
e88ddc2
fix(quality): satisfy eslint and the hydra spec-coverage gate
remko48 Sep 2, 2026
b0e5da9
fix(applications): render the register and private-key dialogs as rea…
remko48 Sep 2, 2026
9c860a4
fix(quality): add the @spec anchors the dialog conversion missed
remko48 Sep 2, 2026
10c2e51
Takes nextcloud-vue 2.31.1 so a hovered KPI tile stops drawing a card…
rubenvdlinde Sep 2, 2026
796865f
Merge branch 'development' into fix/must-list-bug-sweep
remko48 Sep 3, 2026
77819c8
fix(deps): update nextcloud-vue to 2.32.0
remko48 Sep 3, 2026
8426c9a
Merge branch 'fix/must-list-bug-sweep' into fix/dialog-select-reachab…
remko48 Sep 3, 2026
ea88658
Merge branch 'fix/dialog-select-reachability-and-readonly-type' into …
remko48 Sep 3, 2026
fa0b80d
fix(dashboard): push the quick-action tiles through the router
remko48 Sep 3, 2026
52e7702
fix(secrets): offer only real folders when creating a secret
remko48 Sep 3, 2026
7b779d9
style(dashboard): give the quick-action tiles icons that say what the…
remko48 Sep 3, 2026
8c9f435
fix(quality): anchor the action-query watchers for the spec-coverage …
remko48 Sep 3, 2026
f230760
fix(secrets): keep the delete confirmation open while the request is …
remko48 Sep 3, 2026
cab2c6c
Merge pull request #599 from ConductionNL/fix/must-list-bug-sweep
remko48 Sep 3, 2026
a146cd1
Merge remote-tracking branch 'origin/development' into fix/dialog-sel…
remko48 Sep 3, 2026
526f176
fix(secrets): show type icons and strength badges in the cards and ta…
remko48 Sep 3, 2026
e5d7ef6
fix(secrets): stop listing the vaults above the secrets in All secrets
remko48 Sep 3, 2026
2370eca
feat(secrets): say which vault a secret lives in — row dot and detail…
remko48 Sep 3, 2026
1e468ae
fix(l10n): translate the delete-secret warning into German and French
remko48 Sep 3, 2026
a4edf56
Merge pull request #600 from ConductionNL/fix/dialog-select-reachabil…
remko48 Sep 3, 2026
d521a73
Merge remote-tracking branch 'origin/development' into fix/offscreen-…
remko48 Sep 3, 2026
420ca39
fix(secrets): honour the type filter offline and tame the move dialog…
remko48 Sep 3, 2026
25d83cc
fix(applications): harden the one-time private-key dialog and registe…
remko48 Sep 3, 2026
29930d6
Merge branch 'fix/offscreen-application-dialogs' into fix/dashboard-t…
remko48 Sep 3, 2026
3357d09
Merge branch 'fix/dashboard-tiles-relock-vault' into fix/cards-table-…
remko48 Sep 3, 2026
bc82eb4
fix(ci): a standing release PR ran every development push twice
rubenvdlinde Sep 3, 2026
7df2a8e
fix(routing): serve the anonymous shell at every /public subpath
remko48 Sep 3, 2026
f039e5d
fix(routing): resolve recipient routes as paths and rescue sent hash …
remko48 Sep 3, 2026
a348adf
fix(routing): emit path links from the recipient link builders
remko48 Sep 3, 2026
33bf6c7
fix(routing): emit path deep links from search, notifications and the…
remko48 Sep 3, 2026
6a5ad65
test(e2e): cover the anonymous recipient
remko48 Sep 3, 2026
d975124
fix(l10n): translate the recipient pages into Dutch and add an invali…
remko48 Sep 3, 2026
b52cce0
fix(public-pages): centre the recipient card and present the shared s…
remko48 Sep 3, 2026
eb0a396
style(share-dialog): give the one-time credentials room and emphasis
remko48 Sep 3, 2026
f17c7f1
feat(nav): give keepiq a Reports page, from the reports it already ha…
rubenvdlinde Sep 3, 2026
dee6e20
fix(e2e): unlock the vault so the chrome spec can see the app
Sep 3, 2026
16bda3f
Merge pull request #613 from ConductionNL/fix/app-chrome-spec-selectors
rubenvdlinde Sep 4, 2026
c01b55e
build(deps-dev): bump phpstan/phpstan from 2.2.9 to 2.2.10 (#595)
dependabot[bot] Sep 4, 2026
fec77db
build(deps): bump web-token/jwt-library from 4.1.7 to 4.2.1 (#593)
dependabot[bot] Sep 4, 2026
b86dae1
Merge remote-tracking branch 'origin/development' into fix/offscreen-…
remko48 Sep 4, 2026
b163e17
Removed old gitignore row
remko48 Sep 4, 2026
6139b63
updated nextcloud-vue package
remko48 Sep 4, 2026
e35698d
Merge branch 'fix/offscreen-application-dialogs' into fix/dashboard-t…
remko48 Sep 4, 2026
7833387
Merge branch 'fix/dashboard-tiles-relock-vault' into fix/cards-table-…
remko48 Sep 4, 2026
8c15cb6
Merge branch 'fix/cards-table-type-icon-strength-badge' into fix/publ…
remko48 Sep 4, 2026
dfc3bc9
Merge pull request #601 from ConductionNL/fix/offscreen-application-d…
remko48 Sep 4, 2026
b93c9d0
Merge pull request #605 from ConductionNL/fix/dashboard-tiles-relock-…
remko48 Sep 4, 2026
cc71115
Merge pull request #607 from ConductionNL/fix/cards-table-type-icon-s…
remko48 Sep 4, 2026
430b6bb
fix(tests): restore the em dashes mangled in the notifier expectations
remko48 Sep 4, 2026
6a9c60d
fix(spec-coverage): tag the send access page's fragment-key computed
remko48 Sep 4, 2026
c9d7cc3
fix(routing): match the public shell on a segment boundary
remko48 Sep 4, 2026
6de55b7
test(routes): forbid authenticated endpoints under /public
remko48 Sep 4, 2026
2b64bc5
test(coverage): cover the public shell controller
remko48 Sep 4, 2026
07f3ffc
Merge pull request #617 from ConductionNL/fix/public-share-link-routi…
remko48 Sep 4, 2026
356e5e6
fix(e2e): settle the support note once, and create a secret where a s…
rubenvdlinde Sep 5, 2026
a7d393f
fix(e2e): app-chrome unlocks the vault with the password the seed gav…
rubenvdlinde Sep 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/code-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ permissions:

jobs:
quality:
if: (github.event_name != 'pull_request' || github.head_ref != 'development')
uses: ConductionNL/.github/.github/workflows/quality.yml@main
with:
app-name: keepiq
Expand Down
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,6 @@ openspec/test-site-results/**/*.webp
docs/node_modules/
docs/build/

RESTYLE-PLAN.md
# Agent/test scratch and tool caches — generated, never source.
# Added by the 2026-08-25 fleet hygiene sweep (ADR-100 Decision 2).
.stale/
Expand Down
2 changes: 1 addition & 1 deletion appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Vrij en open source onder de EUPL-1.2-licentie.

**Ondersteuning:** Voor ondersteuning, neem contact op via [email protected].
]]></description>
<version>0.2.5-unstable.20260831014129</version>
<version>0.2.8-unstable.20260831212628</version>
<licence>EUPL-1.2</licence>
<author mail="[email protected]" homepage="https://www.conduction.nl/">Conduction</author>
<namespace>Keepiq</namespace>
Expand Down
23 changes: 23 additions & 0 deletions appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,29 @@
// but as #[PublicPage], so account-less recipients reach the SPA.
['name' => 'publicShell#page', 'url' => '/public', 'verb' => 'GET'],

// The public shell's SPA catch-all: the router runs createWebHistory
// with base /apps/keepiq/public, so recipient links are PATHS
// (/public/share/link/{token}, /public/send/{token},
// /public/share/request/{token}) and a load or refresh of any of them
// must serve the shell. Mirrors the AppHost dashboard#page +
// dashboard#catchAll split: a distinct name, because Symfony silently
// replaces same-named routes. Sits in $extra, so it precedes the
// authenticated /{path} fallback.
//
// NEVER ROUTE AN AUTHENTICATED ENDPOINT UNDER /public/. This catch-all
// ('path' => '.+') matches every GET below /public/ and hands it to a
// #[PublicPage] controller, so a session-gated route placed here is
// shadowed: the router matches this entry first, the anonymous shell
// renders, and the intended handler never runs. The author sees a working
// page, not a 404 — a routing slip becomes a silent auth bypass. The shell
// itself exposes no data (it returns the HTML template and nothing else),
// so there is no live vulnerability; the shape is the hazard.
// tests/Unit/AppInfo/PublicRouteSurfaceContractTest.php enforces this:
// every /public route must declare #[PublicPage], or the unit suite fails
// and names the route.
['name' => 'publicShell#pageCatchAll', 'url' => '/public/{path}', 'verb' => 'GET',
'requirements' => ['path' => '.+']],

// Compliance reporting (compliance-reporting §4) — admin-only, the
// gate runs in the controller body before any report logic.
['name' => 'complianceReport#generate', 'url' => '/api/v1/compliance/reports', 'verb' => 'POST'],
Expand Down
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@
"optimize-autoloader": true,
"sort-packages": true,
"platform": {
"php": "8.3"
"php": "8.3",
"ext-xsl": "1"
}
}
}
202 changes: 101 additions & 101 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 0 additions & 5 deletions eslint-suppressions.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,6 @@
"count": 1
}
},
"src/components/application/PrivateKeyDownloadDialog.vue": {
"@typescript-eslint/no-unused-vars": {
"count": 2
}
},
"src/components/dashboard/CaHealthCard.vue": {
"no-console": {
"count": 1
Expand Down
Loading
Loading