Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
333 commits
Select commit Hold shift + click to select a range
03fdf89
ci: test and release the client libraries, checksum and containerise …
rubenvdlinde Oct 2, 2026
9a862ca
docs: client libraries and CI integrations; archive apps-client-libra…
rubenvdlinde Oct 2, 2026
1128585
fix(security): proof-gated abort, single-use proofs in the database, …
rubenvdlinde Oct 2, 2026
7bc6982
feat(sdk): shared Go test stub, caller-kept ETags and lease renewal
rubenvdlinde Oct 2, 2026
f7b82c1
refactor(sharing): no static access, smaller methods, for phpmd and p…
rubenvdlinde Oct 2, 2026
f331aaf
refactor(vault): phpmd findings in the device approval code
rubenvdlinde Oct 2, 2026
030ec81
feat(kubernetes): operator that syncs Keepiq application secrets into…
rubenvdlinde Oct 2, 2026
e2fd718
fix: renew root from CA health, policy on the extension save path, pe…
rubenvdlinde Oct 2, 2026
07d7ca4
feat(kubernetes): Helm chart, no-Secret recipe, release workflow and …
rubenvdlinde Oct 2, 2026
33fad65
docs(openspec): archive apps-kubernetes-injection
rubenvdlinde Oct 2, 2026
b9ceb7a
fix(passkey): do not replace a working passkey when the same device e…
rubenvdlinde Oct 2, 2026
857aed1
wip: unfinished lane work saved by the coordinator after a rate limit…
rubenvdlinde Oct 2, 2026
fcb5c6d
feat(api): If-Match on machine write-back, expiresAt in the envelope
rubenvdlinde Oct 2, 2026
3ac399b
feat(sdk): UpdateIfMatch, ExpiresAt and caller-side encryption helpers
rubenvdlinde Oct 2, 2026
e03799f
fix(sharing): migration after #915's, spec tags on the changed client…
rubenvdlinde Oct 2, 2026
3a51f2f
feat(team-folders): automatic confirmation of new team folder members…
rubenvdlinde Oct 2, 2026
cbaaad4
feat(runner): keepiq-runner core, rotation, connectors and sync desti…
rubenvdlinde Oct 2, 2026
639b86f
test(runner): config, redaction, rotation, crash recovery and schedules
rubenvdlinde Oct 2, 2026
cb69a89
test(runner): sync, destinations, database connectors and the run loop
rubenvdlinde Oct 2, 2026
2bc2cf1
docs(vault): spec tags on the device approval client methods
rubenvdlinde Oct 2, 2026
3971cf6
feat(runner): image, release workflow, example config and docs
rubenvdlinde Oct 2, 2026
d77dc31
fix(suites): contain the whole account on a compromise force-revoke (…
rubenvdlinde Oct 2, 2026
6924663
docs(openspec): archive apps-secret-sync-and-rotation-runner
rubenvdlinde Oct 2, 2026
a08ae70
feat(terraform): keepiq provider with ephemeral reads and write-only …
rubenvdlinde Oct 2, 2026
c72c3e8
Merge origin/development into feat/sharing-use-only-and-expiring-shares
rubenvdlinde Oct 2, 2026
526dea5
style(cli): gofmt the use-only field
rubenvdlinde Oct 2, 2026
d598d1a
feat(terraform): generated docs, examples, release mirror workflow
rubenvdlinde Oct 2, 2026
4b25dfa
docs(openspec): tick apps-terraform-provider tasks; 2.1 blocked on th…
rubenvdlinde Oct 2, 2026
68502e5
Merge origin/development into feat/crypto-new-device-approval
rubenvdlinde Oct 2, 2026
60c3c83
refactor(notifications): render the emergency-access subjects in thei…
rubenvdlinde Oct 2, 2026
d91988a
fix: admin permissions, share approvals from notifications, link expi…
rubenvdlinde Oct 2, 2026
a9d5215
feat(backup): scheduled vault backups with verify and restore from oc…
rubenvdlinde Oct 2, 2026
0fa2687
feat(policy): vault policies for export, two-factor login and team fo…
rubenvdlinde Oct 2, 2026
969ba4e
feat(generator): generate passwords and passphrases in the browser (#…
rubenvdlinde Oct 2, 2026
f221a08
Merge origin/development into feat/sharing-use-only-and-expiring-shares
rubenvdlinde Oct 2, 2026
7bd5288
feat(extension): chosen idle lock delay, several accounts, fingerprin…
rubenvdlinde Oct 2, 2026
40bb9c4
Merge remote-tracking branch 'origin/development' into feat/apps-clie…
rubenvdlinde Oct 2, 2026
7ac7d1e
chore: merge development into feat/crypto-new-device-approval
rubenvdlinde Oct 2, 2026
4a506ff
Merge pull request #914 from ConductionNL/feat/apps-client-libraries-…
rubenvdlinde Oct 2, 2026
69d50e0
Merge remote-tracking branch 'origin/development' into feat/crypto-ne…
rubenvdlinde Oct 2, 2026
682066d
Merge remote-tracking branch 'origin/development' into feat/crypto-ne…
rubenvdlinde Oct 2, 2026
e92d135
Merge remote-tracking branch 'origin/development' into feat/apps-kube…
rubenvdlinde Oct 2, 2026
79afd05
chore: merge development into feat/sharing-use-only-and-expiring-shares
rubenvdlinde Oct 2, 2026
6e73566
feat(admin): split Keepiq administration into five delegable areas (b…
rubenvdlinde Oct 2, 2026
6960b20
feat: Splunk HEC, Microsoft Sentinel and CEF connectors for the SIEM …
rubenvdlinde Oct 2, 2026
592a886
wip: unfinished lane work saved by the coordinator after a usage limi…
rubenvdlinde Oct 2, 2026
4b061ef
test(generator): count passphrase words without splitting on hyphens …
rubenvdlinde Oct 2, 2026
68f447d
chore: move the use-only migration past development's 180000
rubenvdlinde Oct 2, 2026
7f36477
docs(openspec): admin-scoped-roles follows the split per area (decisi…
rubenvdlinde Oct 2, 2026
fff9973
Merge remote-tracking branch 'origin/development' into feat/sharing-u…
rubenvdlinde Oct 2, 2026
e83ab8d
chore: move the device approval migration past development's 180000
rubenvdlinde Oct 2, 2026
f495849
Merge remote-tracking branch 'origin/development' into feat/admin-sco…
rubenvdlinde Oct 2, 2026
f07a4fa
feat(offline): edit secrets offline and sync when back online (#929)
rubenvdlinde Oct 2, 2026
031f686
Merge remote-tracking branch 'origin/development' into feat/apps-kube…
rubenvdlinde Oct 2, 2026
e4c97f1
Merge remote-tracking branch 'origin/development' into feat/crypto-ne…
rubenvdlinde Oct 2, 2026
3ed8568
Merge pull request #922 from ConductionNL/feat/apps-kubernetes-injection
rubenvdlinde Oct 2, 2026
7dce0ed
Merge remote-tracking branch 'origin/development' into feat/apps-secr…
rubenvdlinde Oct 2, 2026
b930ca1
refactor(admin): area settings in their own controller, areas registe…
rubenvdlinde Oct 2, 2026
ff6d7af
Merge remote-tracking branch 'origin/development' into feat/admin-sco…
rubenvdlinde Oct 2, 2026
68516ce
Merge remote-tracking branch 'origin/development' into feat/sharing-u…
rubenvdlinde Oct 2, 2026
6e5564a
feat(extension): store packages, version handshake and next-step code…
rubenvdlinde Oct 2, 2026
e7cff9b
refactor(machine): the If-Match comparison lives next to the ETag it …
rubenvdlinde Oct 2, 2026
7474d16
Merge remote-tracking branch 'origin/development' into feat/apps-secr…
rubenvdlinde Oct 2, 2026
bc6007b
fix(admin): development's offline edits switch belongs to the General…
rubenvdlinde Oct 2, 2026
80fa36a
Merge remote-tracking branch 'origin/development' into feat/crypto-ne…
rubenvdlinde Oct 2, 2026
114b5a9
Merge remote-tracking branch 'origin/development' into feat/sharing-u…
rubenvdlinde Oct 2, 2026
233598c
feat(cli): keepiq ssh-agent serves vault SSH keys (#932)
rubenvdlinde Oct 2, 2026
ad0d467
Merge remote-tracking branch 'origin/development' into feat/sharing-u…
rubenvdlinde Oct 2, 2026
486170b
Merge remote-tracking branch 'origin/development' into feat/apps-secr…
rubenvdlinde Oct 2, 2026
9a08b14
feat(admin): member overview and complete offboarding (replaces #895)…
rubenvdlinde Oct 2, 2026
eae81e3
Merge remote-tracking branch 'origin/development' into feat/apps-secr…
rubenvdlinde Oct 2, 2026
2c34fb2
Merge pull request #926 from ConductionNL/feat/apps-secret-sync-and-r…
rubenvdlinde Oct 2, 2026
7455e34
Merge remote-tracking branch 'origin/development' into feat/apps-terr…
rubenvdlinde Oct 2, 2026
9b8bb8c
Merge remote-tracking branch 'origin/development' into feat/admin-sco…
rubenvdlinde Oct 2, 2026
4a7f184
Merge remote-tracking branch 'origin/development' into feat/sharing-u…
rubenvdlinde Oct 2, 2026
d1ae584
Merge remote-tracking branch 'origin/development' into feat/crypto-ne…
rubenvdlinde Oct 2, 2026
656e9c2
fix(l10n): extract n() as Nextcloud plural entries with per-locale fo…
rubenvdlinde Oct 2, 2026
10322f6
fix(extension): the next-step code watcher does nothing once its page…
rubenvdlinde Oct 2, 2026
4f9a260
Merge remote-tracking branch 'origin/development' into feat/apps-terr…
rubenvdlinde Oct 2, 2026
509a91e
feat(extension): Vault, Generator and Send tabs, and a strong passwor…
rubenvdlinde Oct 2, 2026
71d4088
test(admin): People guard for the member overview, offboarding servic…
rubenvdlinde Oct 2, 2026
c9d523c
Merge remote-tracking branch 'origin/development' into feat/admin-sco…
rubenvdlinde Oct 2, 2026
04c6a56
Merge remote-tracking branch 'origin/development' into feat/apps-terr…
rubenvdlinde Oct 2, 2026
00d06ef
Merge pull request #930 from ConductionNL/feat/apps-terraform-provider
rubenvdlinde Oct 2, 2026
b06eaa5
Merge remote-tracking branch 'origin/development' into feat/crypto-ne…
rubenvdlinde Oct 2, 2026
a5a25a4
Merge pull request #909 from ConductionNL/feat/crypto-new-device-appr…
rubenvdlinde Oct 2, 2026
9e0eeff
chore(admin): name the config_version read as written by OpenRegister…
rubenvdlinde Oct 2, 2026
340c4a1
style: capital letter on the gate-59 marker comment
rubenvdlinde Oct 2, 2026
630237d
Merge remote-tracking branch 'origin/development' into feat/admin-sco…
rubenvdlinde Oct 2, 2026
ee97f02
Merge remote-tracking branch 'origin/development' into feat/sharing-u…
rubenvdlinde Oct 2, 2026
f07e80c
fix(revocation): a compromise force-revoke revokes temporary delegati…
rubenvdlinde Oct 2, 2026
24c4038
fix(admin): device approval switch belongs to the General area, where…
rubenvdlinde Oct 2, 2026
be15d88
Merge remote-tracking branch 'origin/development' into feat/admin-sco…
rubenvdlinde Oct 2, 2026
440d9df
Merge remote-tracking branch 'origin/development' into feat/sharing-u…
rubenvdlinde Oct 2, 2026
fd5c5f9
Merge pull request #898 from ConductionNL/feat/sharing-use-only-and-e…
rubenvdlinde Oct 2, 2026
5ecffea
Merge remote-tracking branch 'origin/development' into feat/admin-sco…
rubenvdlinde Oct 2, 2026
0344536
feat(recovery): organisation account recovery (#920)
rubenvdlinde Oct 2, 2026
b9c5f9f
Merge remote-tracking branch 'origin/development' into feat/admin-sco…
rubenvdlinde Oct 2, 2026
cca06cc
fix(admin): account recovery is managed under the People area
rubenvdlinde Oct 2, 2026
524493b
feat(team-folders): a manager role on team folders (#903)
rubenvdlinde Oct 2, 2026
8d16d9a
fix(admin): import the account recovery section the admin page renders
rubenvdlinde Oct 2, 2026
2c52c65
Merge remote-tracking branch 'origin/development' into feat/admin-sco…
rubenvdlinde Oct 2, 2026
e8f1dd5
feat(extension): complete Generator and Send: usernames, history, pic…
rubenvdlinde Oct 2, 2026
60d50c8
Merge remote-tracking branch 'origin/development' into feat/admin-sco…
rubenvdlinde Oct 2, 2026
cf48cd8
Merge pull request #962 from ConductionNL/feat/admin-scoped-roles
rubenvdlinde Oct 2, 2026
c1baa57
fix(revocation): force-revoke needs the typed suite id, on every back…
rubenvdlinde Oct 2, 2026
ece983f
feat(extension): item detail, editing and folder manager in the popup…
rubenvdlinde Oct 3, 2026
656efd1
feat(extension): vault snapshot and sync, offline reads and autofill …
rubenvdlinde Oct 3, 2026
61329cb
feat(extension): popup shell with a bottom tab bar, pop-out window, l…
rubenvdlinde Oct 3, 2026
968521c
fix(sharing): a vault-key proof for a share to a new recipient, batch…
rubenvdlinde Oct 3, 2026
3402a4d
fix(extension): a passkey's private key stays in the worker (#1002)
rubenvdlinde Oct 3, 2026
792bc92
feat(admin-api): a versioned admin API under /api/v1/admin (stacked o…
rubenvdlinde Oct 3, 2026
6c8c766
docs(openspec): keep the keepiq-extension plans as a reference, mappe…
rubenvdlinde Oct 3, 2026
7b0e9b3
docs(openspec): propose closing the gaps against the keepiq-extension…
rubenvdlinde Oct 3, 2026
8949797
feat(machine-api): an application reads its own certificate at /api/v…
rubenvdlinde Oct 3, 2026
8e12688
fix(expiry): earliest expiry wins everywhere; drop the enforce switch…
rubenvdlinde Oct 3, 2026
dcde9d5
fix(link-sharing): only the owner or a delegate may create a public l…
rubenvdlinde Oct 3, 2026
4031e5b
feat(terraform): keepiq_application and keepiq_application_lease_poli…
rubenvdlinde Oct 3, 2026
d529a51
fix(leases): drop the renew endpoint; fetching again is the one renew…
rubenvdlinde Oct 3, 2026
79a2104
feat(team-folders): approve one waiting member at a time (#970)
rubenvdlinde Oct 3, 2026
3a17be6
ci: run the development to beta promotion PR so Playwright sees it (#…
rubenvdlinde Oct 3, 2026
a4c404e
chore(deps): migrate to phpseclib 4 (#980)
rubenvdlinde Oct 3, 2026
8d000b9
feat: metadata-only MCP tools for AI agents, and a guard against inte…
rubenvdlinde Oct 3, 2026
1df09ac
ci(extension): attach the AMO-signed Firefox file to the release afte…
rubenvdlinde Oct 3, 2026
774478f
docs: CHANGELOG.md, and archive leaf-integrations (#1016)
rubenvdlinde Oct 3, 2026
44a0e74
feat(sharing): pick share recipients from the user search, marked whe…
rubenvdlinde Oct 3, 2026
c86ea42
feat(extension): approve a locked extension from another device (#983)
rubenvdlinde Oct 3, 2026
3ade24a
feat(federation): partner endpoints under OCM, partner allowlist and …
rubenvdlinde Oct 3, 2026
67851f7
feat(federation): federated share tables and read-only copies
rubenvdlinde Oct 3, 2026
abb1a1e
chore(sharing): one-line key-proof attribute on ShareController::create
rubenvdlinde Oct 3, 2026
4d5c8ac
feat(federation): send, receive and accept federated shares over OCM
rubenvdlinde Oct 3, 2026
244429e
chore(sharing): one-line key-proof attribute on ShareController::create
rubenvdlinde Oct 3, 2026
df914a2
Merge branch 'feat/federated-recipients-sharing' into feat/federated-…
rubenvdlinde Oct 3, 2026
656a6c6
feat(federation): share with someone at another organisation from the…
rubenvdlinde Oct 3, 2026
4f9b010
chore(l10n): the federated share dialog and the receive setting in ev…
rubenvdlinde Oct 3, 2026
f0fd5bf
feat(federation): updates, revocation, suspension, retries and audit …
rubenvdlinde Oct 3, 2026
66a9cca
chore(l10n): federated share states and audit labels in every catalogue
rubenvdlinde Oct 3, 2026
b009cae
fix(federation): name the sender in OCM calls so Nextcloud 35 can ver…
rubenvdlinde Oct 3, 2026
f7c9eca
Merge branch 'feat/federated-recipients-delivery' into feat/federated…
rubenvdlinde Oct 3, 2026
13420a4
Merge branch 'feat/federated-recipients-dialog' into feat/federated-r…
rubenvdlinde Oct 3, 2026
252aeb4
fix(federation): compare cloud ids without the scheme an http instanc…
rubenvdlinde Oct 3, 2026
c1235a2
Merge branch 'feat/federated-recipients-delivery' into feat/federated…
rubenvdlinde Oct 3, 2026
0f2d22d
Merge branch 'feat/federated-recipients-dialog' into feat/federated-r…
rubenvdlinde Oct 3, 2026
801d24c
refactor(federation): compare the partner's user by host, without a n…
rubenvdlinde Oct 3, 2026
374c75a
Merge branch 'feat/federated-recipients-delivery' into feat/federated…
rubenvdlinde Oct 3, 2026
7815a3b
Merge branch 'feat/federated-recipients-dialog' into feat/federated-r…
rubenvdlinde Oct 3, 2026
3857284
chore(federation): move the two-instance test files to their own change
rubenvdlinde Oct 4, 2026
a54788a
fix(federation): check an incoming share's signature against its owne…
rubenvdlinde Oct 4, 2026
cffafe5
Merge branch 'feat/federated-recipients-delivery' into feat/federated…
rubenvdlinde Oct 4, 2026
800d880
Merge branch 'feat/federated-recipients-dialog' into feat/federated-r…
rubenvdlinde Oct 4, 2026
8a21909
fix(federation): let Nextcloud 35 verify the signature of a share not…
rubenvdlinde Oct 4, 2026
9acbf0b
fix(federation): share again after a suspended, failed or revoked fed…
rubenvdlinde Oct 4, 2026
1fa2447
test(federation): share, accept, update and revoke across two Nextclo…
rubenvdlinde Oct 4, 2026
6263e87
style(federation): prettier on the federation frontend files
rubenvdlinde Oct 4, 2026
0d968c2
Merge branch 'feat/federated-recipients-delivery' into feat/federated…
rubenvdlinde Oct 4, 2026
c329e3e
style(federation): prettier on the federation frontend files
rubenvdlinde Oct 4, 2026
c64a9e3
Merge branch 'feat/federated-recipients-dialog' into feat/federated-r…
rubenvdlinde Oct 4, 2026
47ef5b4
style(federation): prettier and eslint agree on the federation fronte…
rubenvdlinde Oct 4, 2026
cf2320b
style(federation): prettier and eslint agree on the federation fronte…
rubenvdlinde Oct 4, 2026
e3a359e
Merge branch 'feat/federated-recipients-delivery' into feat/federated…
rubenvdlinde Oct 4, 2026
8f191ee
style(federation): prettier and eslint agree on the federation fronte…
rubenvdlinde Oct 4, 2026
9c25cc8
Merge branch 'feat/federated-recipients-dialog' into feat/federated-r…
rubenvdlinde Oct 4, 2026
f7a56ee
Merge branch 'feat/federated-recipients-sync' into feat/federated-rec…
rubenvdlinde Oct 4, 2026
7f15511
docs(openspec): tick 1.3 with its live check; 5.1 built, its CI run owed
rubenvdlinde Oct 4, 2026
fa02877
chore(sharing): key-proof attribute above the docblock, within the li…
rubenvdlinde Oct 4, 2026
dc601fe
Merge branch 'feat/federated-recipients-sharing' into feat/federated-…
rubenvdlinde Oct 4, 2026
5fb59cc
test(router): classify the incoming shares page as protected
rubenvdlinde Oct 4, 2026
e894266
Merge branch 'feat/federated-recipients-delivery' into feat/federated…
rubenvdlinde Oct 4, 2026
71e8571
docs(sharing): spec tags on the share dialog's mounted hook
rubenvdlinde Oct 4, 2026
73c67bd
Merge branch 'feat/federated-recipients-dialog' into feat/federated-r…
rubenvdlinde Oct 4, 2026
2b88f80
refactor(federation): the duplicate-share check in its own method
rubenvdlinde Oct 4, 2026
7dc4220
Merge branch 'feat/federated-recipients-sync' into feat/federated-rec…
rubenvdlinde Oct 4, 2026
918db93
test(federation): wait on the outcome, not a fixed pause, in the shar…
rubenvdlinde Oct 4, 2026
67185db
Merge branch 'feat/federated-recipients-dialog' into feat/federated-r…
rubenvdlinde Oct 4, 2026
b96e2e0
Merge branch 'feat/federated-recipients-sync' into feat/federated-rec…
rubenvdlinde Oct 4, 2026
f76a576
docs(openspec): record the live key-proof checks for harden-vault-key…
rubenvdlinde Oct 4, 2026
51ed544
test(e2e): an Audit-only delegated group sees its area and nothing el…
rubenvdlinde Oct 4, 2026
2f19c14
fix(backup): bind restored values with their own type (#1029)
rubenvdlinde Oct 4, 2026
4933a57
docs(openspec): live-check and archive app-own-certificate (#1032)
rubenvdlinde Oct 4, 2026
475f2ca
feat(extension): record the extension's standing decisions, and hold …
rubenvdlinde Oct 4, 2026
c302cf1
fix(cli): page the secret list and let eval start the SSH agent (#786…
rubenvdlinde Oct 4, 2026
542b832
feat(extension): https server addresses, no cookies, and a revoked ap…
rubenvdlinde Oct 4, 2026
65f0b82
fix(extension): fill the one-time code on the next step again; unpack…
rubenvdlinde Oct 4, 2026
9c11b46
feat(extension): the popup forgets the vault on lock, a new master pa…
rubenvdlinde Oct 4, 2026
8afb518
test(admin-api): delegate through the real settings route, archive ad…
rubenvdlinde Oct 4, 2026
8f6d017
chore(openspec): verify the Keepiq MCP tools live through OpenRegiste…
rubenvdlinde Oct 4, 2026
0d747d8
fix(vault): show "Approve from another device" on the lock screen; de…
rubenvdlinde Oct 4, 2026
e52998c
feat(extension): fill only frames on the site, ask before http, and a…
rubenvdlinde Oct 4, 2026
9e7eb08
fix(backup): restore switches maintenance mode on and off itself (#1055)
rubenvdlinde Oct 4, 2026
d648646
chore(openspec): run the Integrations e2e spec live and archive adopt…
rubenvdlinde Oct 4, 2026
91f3c3a
feat(extension): the worker clears every copy after the user's delay,…
rubenvdlinde Oct 4, 2026
216934d
fix(recovery): valid notification object ids; account recovery e2e; a…
rubenvdlinde Oct 4, 2026
0af31ad
fix(sharing): a team-folder manager can register the fan-out; manager…
rubenvdlinde Oct 4, 2026
29689be
feat(extension): icons, Firefox's data collection declaration and thi…
rubenvdlinde Oct 4, 2026
c2f5372
test(sharing): expired copies on every read path, use-only share e2e;…
rubenvdlinde Oct 4, 2026
9c4f48d
feat(extension): offline unlock, clear messages, show and hide, log o…
rubenvdlinde Oct 4, 2026
fd615cd
fix(policies): live checks for vault policies, two defects fixed, arc…
rubenvdlinde Oct 4, 2026
6486e36
feat(extension): unlock with a PIN until the browser closes (#1084)
rubenvdlinde Oct 4, 2026
9e1929f
test(e2e): auto-confirm and member offboarding flows, archive both ch…
rubenvdlinde Oct 4, 2026
0576c8a
Merge remote-tracking branch 'origin/development' into feat/federated…
rubenvdlinde Oct 4, 2026
797b749
feat(extension): fields in shadow roots, fill from the menu or a shor…
rubenvdlinde Oct 4, 2026
013ac2e
Merge remote-tracking branch 'origin/development' into feat/federated…
rubenvdlinde Oct 4, 2026
959807c
Merge pull request #1035 from ConductionNL/feat/federated-recipients-…
rubenvdlinde Oct 4, 2026
21fe6c7
Merge remote-tracking branch 'origin/development' into feat/federated…
rubenvdlinde Oct 4, 2026
5bf0766
feat(extension): a vault list that says what it shows, and settings f…
rubenvdlinde Oct 4, 2026
3e03924
docs(openspec): archive four changes whose last steps live outside th…
rubenvdlinde Oct 4, 2026
e563088
test(e2e): the incoming shares page renders at #/incoming
rubenvdlinde Oct 4, 2026
9d9d5f0
Merge remote-tracking branch 'origin/development' into feat/federated…
rubenvdlinde Oct 4, 2026
e030ef7
Merge pull request #1036 from ConductionNL/feat/federated-recipients-…
rubenvdlinde Oct 4, 2026
7467b61
Merge remote-tracking branch 'origin/development' into feat/federated…
rubenvdlinde Oct 4, 2026
5d31839
Merge pull request #1037 from ConductionNL/feat/federated-recipients-…
rubenvdlinde Oct 4, 2026
970982a
Merge remote-tracking branch 'origin/development' into feat/federated…
rubenvdlinde Oct 4, 2026
6589158
Merge pull request #1038 from ConductionNL/feat/federated-recipients-…
rubenvdlinde Oct 4, 2026
9a921e9
Merge remote-tracking branch 'origin/development' into feat/federated…
rubenvdlinde Oct 4, 2026
7868671
Merge pull request #1039 from ConductionNL/feat/federated-recipients-e2e
rubenvdlinde Oct 4, 2026
5abd22e
fix(api): refusals reach the browser as 428 with an error code (#1104)
rubenvdlinde Oct 4, 2026
ef5dbd4
feat(federation): recipients decline by deleting, file copies in fold…
rubenvdlinde Oct 4, 2026
f53d72e
ci(federation): build on Node 24, whose npm 11 reads the lockfiles (#…
rubenvdlinde Oct 4, 2026
0c80a77
docs(openspec): archive sharing-federated-recipients (#1108)
rubenvdlinde Oct 4, 2026
ccdec18
docs(openspec): reproduce the #395 lockout pre-fix, refuse it post-fi…
rubenvdlinde Oct 4, 2026
e7647a4
docs(adr): vault audit and share checks stay app-local (gate-23 excep…
rubenvdlinde Oct 4, 2026
d130a1b
feat(extension): send details: offline, progress, logins only, what a…
rubenvdlinde Oct 4, 2026
f925093
feat(extension): save prompt details: one login to update, password o…
rubenvdlinde Oct 4, 2026
1375727
feat(generator): every chosen kind of character appears, and the poli…
rubenvdlinde Oct 4, 2026
0a1b7e0
feat(extension): small items: last use first, site address for a new …
rubenvdlinde Oct 4, 2026
cd86dac
feat(federation): declining a pending share and restoring a deleted c…
rubenvdlinde Oct 4, 2026
d5e7833
docs(extension): a user guide, a README that matches the code, and a …
rubenvdlinde Oct 4, 2026
12ddfa7
docs(openspec): archive the four finished extension changes into open…
rubenvdlinde Oct 4, 2026
38cf2e8
fix: psalm green again, two spec references that pointed nowhere, and…
rubenvdlinde Oct 4, 2026
d1ddfe3
feat(admin-areas): remove the vault_admin alias and its notice (#1138)
rubenvdlinde Oct 4, 2026
7f1a679
spec: native iOS and Android apps, on the App Store, Google Play and …
rubenvdlinde Oct 4, 2026
8ad04aa
ci(cli): check keepiq ssh-agent on macOS (#1142)
rubenvdlinde Oct 4, 2026
add76d4
fix(cli): keepiq ssh-agent stays in the foreground under systemd (#1144)
rubenvdlinde Oct 4, 2026
2fd2ec2
chore(deps): close the Dependabot alerts on the docs site and fast-ur…
rubenvdlinde Oct 4, 2026
722dec8
docs(extension): screenshots and videos of the browser extension, wit…
rubenvdlinde Oct 4, 2026
cb299d8
chore(openspec): archive favourites, tags and last used, whose live f…
rubenvdlinde Oct 4, 2026
0f7bc7d
fix(extension): space Copy and Open, show Hours only for Custom, hide…
rubenvdlinde Oct 4, 2026
fc00a0f
Merge pull request #1151 from ConductionNL/chore/livepass-archive-vau…
rubenvdlinde Oct 4, 2026
bbf85af
feat(mobile): shared Kotlin core and the crypto contract with the web…
rubenvdlinde Oct 4, 2026
410d4af
feat(mobile): API client, offline store and sync in the shared core (…
rubenvdlinde Oct 4, 2026
1f14508
feat(mobile): vault, Send and generator screens on Android and iOS (#…
rubenvdlinde Oct 4, 2026
8ee612e
feat(mobile): pairing and unlock on Android and iOS, with the mobile …
rubenvdlinde Oct 4, 2026
40df649
feat(mobile): open the vault after unlock, lock forgets the key, vaul…
rubenvdlinde Oct 5, 2026
de3ef2b
feat(mobile): system autofill on Android and iOS (task group 4) (#1164)
rubenvdlinde Oct 5, 2026
b5a914d
feat(mobile): Android preview APK release and the mobile user guide (…
rubenvdlinde Oct 5, 2026
c970180
fix(mobile): autofill in settings, no iOS save prompt, QUERY_ALL_PACK…
rubenvdlinde Oct 5, 2026
4729165
feat(mobile): passkeys on Android 14+ and iOS 17+ (task group 5) (#1170)
rubenvdlinde Oct 5, 2026
d248121
fix(secrets): show the login field above the secret value in the crea…
SudoThijn Oct 5, 2026
ef24601
Merge pull request #1173 from ConductionNL/fix/create-dialog-login-ab…
SudoThijn Oct 5, 2026
6164c0e
chore(deps): DOMPurify 3.4.16 (#1176)
rubenvdlinde Oct 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
30 changes: 30 additions & 0 deletions .github/workflows/admin-api.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Admin API document

# Lints docs/api/admin-v1.openapi.json as OpenAPI 3.1 (admin-public-api §2.1).
# That the document and appinfo/routes.php agree is checked by PHPUnit
# (tests/Unit/Contract/AdminApiContractTest.php) in the code quality workflow.

on:
push:
branches: [main, development]
paths: ["docs/api/**", ".github/workflows/admin-api.yml"]
pull_request:
branches: [main, development, beta]
paths: ["docs/api/**", ".github/workflows/admin-api.yml"]
workflow_dispatch:

permissions:
contents: read

jobs:
lint:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-node@v4
with:
node-version: "20"
- run: npx --yes @redocly/cli@1 lint docs/api/admin-v1.openapi.json
43 changes: 43 additions & 0 deletions .github/workflows/browser-extension.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Browser extension

# Builds the extension for Chromium and Firefox and loads each package in a
# headless browser to check its background starts and answers the popup
# (clients-browser-builds). Safari needs a macOS runner and stays an open task.

on:
push:
branches: [main, development]
paths: ["browser-extension/**", "src/crypto/**", "src/totp/**", ".github/workflows/browser-extension.yml"]
pull_request:
branches: [main, development, beta]
paths: ["browser-extension/**", "src/crypto/**", "src/totp/**", ".github/workflows/browser-extension.yml"]
workflow_dispatch:

jobs:
build-and-load:
runs-on: ubuntu-latest
# A build and two browser starts; minutes at most.
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "24"
cache: npm
- run: npm ci --ignore-scripts
- run: npm run build:extension
- name: Chromium loads the package
run: |
npx playwright install --with-deps chromium
node browser-extension/load-check/chromium.mjs
- name: Firefox loads the package
run: |
npm install --no-save selenium-webdriver@4
firefox --version
geckodriver --version
node browser-extension/load-check/firefox.mjs
- uses: actions/upload-artifact@v4
with:
name: browser-extension
path: browser-extension/dist/
retention-days: 14
Comment on lines +18 to +43
62 changes: 62 additions & 0 deletions .github/workflows/cli-macos.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: CLI on macOS

# Checks `keepiq ssh-agent` on macOS, where nobody on the team has a Mac to
# try it by hand (keepiq#1042). With no secrets and no Nextcloud server it:
#
# - runs the CLI's Go tests, including the real-sshd integration test and
# the `eval` test, and fails if either of those is skipped
# - runs cli/scripts/ssh-agent-e2e.sh: the README's recipe in a real shell
# against a fake Keepiq (cli/internal/fakevault) and a throwaway sshd
# started as the runner user on a high port, never the system sshd
# - installs the README's launchd plist in the runner user's home and checks
# the agent launchd starts (same script, KEEPIQ_E2E_LAUNCHD=1)

on:
pull_request:
branches: [main, development, beta]
paths: ["cli/**", "sdk/go/**", "sdk/testdata/**", ".github/workflows/cli-macos.yml"]
workflow_dispatch:

permissions:
contents: read

concurrency:
group: cli-macos-${{ github.ref }}
cancel-in-progress: true

jobs:
ssh-agent:
runs-on: macos-latest
# The Go tests take a few minutes (RSA-4096 keys); the e2e script under two.
timeout-minutes: 25
defaults:
run:
working-directory: cli
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: "1.25.x"
cache-dependency-path: cli/go.sum
- name: Versions
run: |
sw_vers
uname -m
go version
ssh -V
command -v sshd ssh-add git
id
- run: go vet ./...
- name: Go tests, with the ssh-agent tests required to run
run: |
set -o pipefail
go test -count=1 -v ./... 2>&1 | tee "$RUNNER_TEMP/go-test.log" | grep -E '^(--- |ok|FAIL|PASS)'
for t in TestRealSSHThroughTheAgent TestEvalReturnsAndTheAgentKeepsServing TestVaultUnlockerReadsOnlyCiphertext; do
grep -q -- "--- PASS: $t " "$RUNNER_TEMP/go-test.log" || { echo "::error::$t did not pass (skipped or missing)"; exit 1; }
done
- name: README recipe and launchd plist, end to end
# A hang in `eval "$(keepiq ssh-agent)"` (keepiq#1022) ends here, not at the job limit.
timeout-minutes: 10
env:
KEEPIQ_E2E_LAUNCHD: "1"
run: bash scripts/ssh-agent-e2e.sh
102 changes: 94 additions & 8 deletions .github/workflows/cli-release.yml
Original file line number Diff line number Diff line change
@@ -1,23 +1,27 @@
name: CLI Release

# Builds the keepiq-cli single static binary for every supported platform.
# On a tag push it also uploads the artifacts to the GitHub release. The CLI is
# stdlib-only Go, so the matrix is a plain cross-compile — no PHP/Node needed.
# On a tag push it also uploads the artifacts to the GitHub release, with a
# SHA256SUMS file that the GitHub Action and the GitLab template check every
# download against, and pushes the container image ghcr.io/conductionnl/keepiq-cli
# at the same version. The CLI is pure Go: the standard library, sdk/go in this
# repository, and the Go project's golang.org/x/crypto and golang.org/x/sys for
# the SSH agent. The matrix is a plain cross-compile with no PHP or Node needed.

on:
push:
branches: [main, development]
paths: ["cli/**"]
paths: ["cli/**", "sdk/go/**", "sdk/testdata/**", ".github/workflows/cli-release.yml"]
tags: ["cli-v*"]
pull_request:
branches: [main, development, beta]
paths: ["cli/**"]
paths: ["cli/**", "sdk/go/**", "sdk/testdata/**", ".github/workflows/cli-release.yml"]
workflow_dispatch:

jobs:
test:
runs-on: ubuntu-latest
# No observed runs yet; a Go vet+test of a stdlib-only CLI is minutes at most.
# No observed runs yet; vet, test and govulncheck of the CLI are minutes at most.
timeout-minutes: 20
defaults:
run:
Expand All @@ -26,14 +30,20 @@
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: "1.22"
go-version: "1.25.x"
- run: go vet ./...
# The SSH agent's integration test runs the real ssh client against a
# throwaway sshd on localhost (cli-ssh-agent).
- name: Install OpenSSH for the agent integration test
run: sudo apt-get update -qq && sudo apt-get install -y -qq openssh-server openssh-client && sudo mkdir -p /run/sshd
- run: go test ./...
# The CLI now has dependencies: check them for known vulnerabilities.
- run: go run golang.org/x/vuln/cmd/[email protected] ./...

build:
needs: test
runs-on: ubuntu-latest
# No observed runs yet; a stdlib-only Go cross-compile is minutes at most.
# No observed runs yet; a pure-Go cross-compile is minutes at most.
timeout-minutes: 20
defaults:
run:
Expand All @@ -51,7 +61,7 @@
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: "1.22"
go-version: "1.25.x"
- name: Build static binary
env:
GOOS: ${{ matrix.target.goos }}
Expand All @@ -72,3 +82,79 @@
uses: softprops/action-gh-release@v2
with:
files: ${{ env.ARTIFACT }}

checksums:
# One SHA256SUMS over every binary, attached to the release. On a branch or
# pull request it is built and uploaded as an artifact only (the dry run).
needs: build
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/download-artifact@v4
with:
pattern: keepiq-*
merge-multiple: true
path: dist
- name: Write SHA256SUMS
working-directory: dist
run: |
sha256sum keepiq-* > SHA256SUMS
cat SHA256SUMS
test "$(wc -l < SHA256SUMS)" -eq 6
- uses: actions/upload-artifact@v4
with:
name: SHA256SUMS
path: dist/SHA256SUMS
- name: Attach to release
if: startsWith(github.ref, 'refs/tags/cli-v')
uses: softprops/action-gh-release@v2
with:
files: dist/SHA256SUMS

image:
Comment on lines +89 to +114
# ghcr.io/conductionnl/keepiq-cli: the linux binaries on a distroless static
# base, multi-arch, tagged with the release version. Pushed on a cli-v tag;
# built without pushing otherwise (the dry run).
needs: build
runs-on: ubuntu-latest
timeout-minutes: 20
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
pattern: keepiq-linux-*
merge-multiple: true
path: cli/dist
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- name: Log in to ghcr.io
if: startsWith(github.ref, 'refs/tags/cli-v')
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Image tags
id: tags
run: |
version="${GITHUB_REF_NAME#cli-v}"
echo "tags=ghcr.io/conductionnl/keepiq-cli:${version},ghcr.io/conductionnl/keepiq-cli:latest" >> "$GITHUB_OUTPUT"
- uses: docker/build-push-action@v6
with:
context: cli
file: cli/Dockerfile
platforms: linux/amd64,linux/arm64
push: ${{ startsWith(github.ref, 'refs/tags/cli-v') }}
load: false
tags: ${{ steps.tags.outputs.tags }}
labels: |
org.opencontainers.image.source=https://github.com/ConductionNL/keepiq
org.opencontainers.image.description=keepiq CLI, the zero-knowledge Keepiq command-line client
org.opencontainers.image.licenses=EUPL-1.2
- name: Smoke test the amd64 image
run: |
docker buildx build --platform linux/amd64 --load -t keepiq-cli:smoke -f cli/Dockerfile cli
docker run --rm keepiq-cli:smoke --version
23 changes: 19 additions & 4 deletions .github/workflows/code-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,21 @@ permissions:

jobs:
quality:
# Skips the standing "development → beta" sync PR, which would otherwise
# re-run the whole pipeline on every merge into development.
if: (github.event_name != 'pull_request' || github.head_ref != 'development')
# THE PROMOTION PR RUNS (keepiq#882). A pull request whose head is
# `development` is skipped only when it targets something other than
# `beta`. The standing "development to beta" sync PR used to be skipped
# too, and the shared workflow keeps Playwright off ordinary `development`
# traffic (`e2e-promotion-only`, default true) and runs it on PRs into
# `beta` and `main` instead. The two rules together meant the promotion
# into `beta` ran nothing, so release.yml cut the beta artifact before
# Playwright had seen the promoted tree.
#
# The price is a full run each time a merge into `development` updates the
# sync PR. The concurrency group above cancels a superseded PR run, so only
# the newest one finishes. The fast tier on that run repeats what the push
# to `development` already checked; the shared workflow has no input to run
# only the heavy tier.
if: (github.event_name != 'pull_request' || github.head_ref != 'development' || github.base_ref == 'beta')
uses: ConductionNL/.github/.github/workflows/quality.yml@main
with:
app-name: keepiq
Expand Down Expand Up @@ -190,7 +202,10 @@ jobs:
# integriq is here because the Integrations page reads integriq's
# `app_connection` rows (adopt-connection-registry). Without it the page
# shows the missing-dependency screen and
# `tests/e2e/workflows/integrations-page.spec.ts` fails on every run.
# `tests/e2e/workflows/integrations-page.spec.ts` fails wherever
# Playwright runs: the promotion PRs into `beta` and `main`, the nightly
# dispatch, and a manual dispatch. Ordinary `development` pushes and PRs
# do not run Playwright (`e2e-promotion-only`).
# `app` is `integriq`, verified in its appinfo/info.xml on `development`
# on 2026-09-15.
additional-apps: '[{"repo":"ConductionNL/openregister","app":"openregister","ref":"development"},{"repo":"ConductionNL/integriq","app":"integriq","ref":"development"}]'
Expand Down
Loading
Loading