Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
5979431
fix(review): #4580 eng-f2 — A required file property can never be sat…
WilcoLouwerse Oct 15, 2026
402a14a
fix(review): #4580 eng-f6 — Review policy fails open for visibility w…
WilcoLouwerse Oct 15, 2026
728c921
fix(review): #4580 data-f1 — Bulk save overwrites another user's draft
WilcoLouwerse Oct 15, 2026
f67de45
fix(review): #4580 plat-f1 — Frozen-file guard ignores writes made th…
WilcoLouwerse Oct 15, 2026
f1f9c1d
fix(review): #4580 plat-f2 — Any admin-UI file-settings save clears t…
WilcoLouwerse Oct 15, 2026
02b9222
fix(review): #4580 plat-f3 — Deferred-chunk limit is 32000, but NC 32…
WilcoLouwerse Oct 15, 2026
227bc52
fix(review): #4580 eng-f1 — Upload endpoint ignores the form's audience
WilcoLouwerse Oct 15, 2026
94854b2
fix(review): #4580 eng-f3 — Idempotency key is neither subject-bound …
WilcoLouwerse Oct 15, 2026
f990f3d
fix(review): #4580 eng-f5 — Draft cleanup deletes without re-checking…
WilcoLouwerse Oct 15, 2026
33f3e3f
fix(review): #4580 eng-f7 — Dependent form reported unpublished when …
WilcoLouwerse Oct 15, 2026
1f4eafb
fix(review): #4580 surf-f6 — Dependent-form re-check runs on one sche…
WilcoLouwerse Oct 15, 2026
03e338e
fix(review): #4580 data-f4 — Forced re-import deletes local authoriza…
WilcoLouwerse Oct 15, 2026
363e607
fix(review): #4580 data-f3 — RBAC draft predicate ignores unhealed _s…
WilcoLouwerse Oct 15, 2026
d4aa263
fix(review): #4580 data-f5 — Aggregation fast path counts drafts the …
WilcoLouwerse Oct 15, 2026
a33e49b
fix(review): #4580 plat-f5 — A later listener's allow() overrides an …
WilcoLouwerse Oct 15, 2026
e19745b
fix(review): #4580 aud-p1 — The "may not let itself in" check ignores…
WilcoLouwerse Oct 15, 2026
d0d2725
fix(review): #4580 aud-p4 — Guard failure imports shipped authorizati…
WilcoLouwerse Oct 15, 2026
5faeef9
fix(review): #4580 surf-f4 — Copies still send users to the removed p…
WilcoLouwerse Oct 15, 2026
4e900c4
fix(review): #4580 surf-f1 — Object GET /logs bypasses the audit-hist…
WilcoLouwerse Oct 15, 2026
c967b2d
fix(review): #4580 eng-f8 — Task wake still overwrites another listen…
WilcoLouwerse Oct 15, 2026
1dfdcd3
fix(review): #4580 eng-f9 — Decision ownership check is skipped in tw…
WilcoLouwerse Oct 15, 2026
09d5d98
fix(review): #4580 eng-f10 — Failure to arm a statutory expiry timer …
WilcoLouwerse Oct 15, 2026
71f4796
fix(review): #4580 plat-f4 — Aborted delete or rename reads as succes…
WilcoLouwerse Oct 15, 2026
224da09
fix(review): #4580 eng-f3 — @spec on FormIdempotencyStore::release
WilcoLouwerse Oct 15, 2026
50bee16
fix(review): #4580 eng-f10 — pre-push: do not rethrow from the listen…
WilcoLouwerse Oct 15, 2026
2d0dbae
fix(review): #4580 data-f1 — pre-push: bulk and single delete keep an…
WilcoLouwerse Oct 15, 2026
c535484
fix(review): #4580 data-f1 — pre-push: draft guard before the appendO…
WilcoLouwerse Oct 15, 2026
fb4be1d
fix(review): #4580 plat-f3 — pre-push: say what an oversized entry loses
WilcoLouwerse Oct 15, 2026
59f9aca
fix(review): #4580 plat-f3 — pre-push: contain a refused webhook job …
WilcoLouwerse Oct 15, 2026
6703ff7
fix(review): #4580 eng-f3 — pre-push: scenario and docs follow the ne…
WilcoLouwerse Oct 15, 2026
9420851
fix(review): #4580 surf-f4 — pre-push: federated-configuration doc sa…
WilcoLouwerse Oct 15, 2026
902c28b
fix(review): #4580 surf-f1 — pre-push: phpcs inline if in logsForReader
WilcoLouwerse Oct 15, 2026
d942f68
fix(review): #4580 data-f1 — pre-push: admins pass the draft guards l…
WilcoLouwerse Oct 15, 2026
42248e3
fix(l10n): user-settings wording of the VAPID hint in the other 34 lo…
WilcoLouwerse Oct 16, 2026
6d71d17
fix(quality): phpcs line length and phpmd findings in the review fixes
WilcoLouwerse Oct 16, 2026
ca4ddda
test(aggregation): give the SQLite fixtures the _status column the dr…
WilcoLouwerse Oct 16, 2026
db13f88
fix(spec): follow the renamed oauth2-connect requirement in its @spec…
WilcoLouwerse Oct 16, 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
8 changes: 7 additions & 1 deletion docs/features/form-destination.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,16 @@ OpenRegister object (`status: published`, `destination` or `writes`,
| 401 | The form is for signed-in people |
| 403 | The subject may not create the destination |
| 404 | No such published form (also counted as a brute-force attempt) |
| 409 | The `Idempotency-Key` is in use by a submit still running, or was used by another person or for another payload |
| 422 | The payload was refused: `{ message, findings }`, nothing was created |
| 503 | The destination could not be reached; the resident tries again later |

A retried `Idempotency-Key` returns the first answer for 24 hours. When one
A retried `Idempotency-Key` returns the first answer for 24 hours, to the same
person with the same payload only; the key is reserved while its submit runs, so
a parallel retry answers 409 instead of creating a second object. That
parallel-retry protection relies on Nextcloud's file locking (`filelocking.enabled`,
on by default); with file locking switched off the key is not reserved and only the
sequential repeat is answered from the stored answer. When one
of several writes is refused, the earlier writes of that submit are deleted
before the answer, and the deletion is logged.

Expand Down
2 changes: 1 addition & 1 deletion docs/federated-configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ rules.
## Choose which GitHub credential the store uses

The store never assumes your only GitHub key is the one you meant to use. In the
app's **Configuration store** settings pane (personal settings), pick which of
app's **Configuration store** settings pane (user settings), pick which of
your GitHub credentials the store should publish and browse with. The choice is
saved as a per-user preference; the credential itself is custodied by the broker.

Expand Down
2 changes: 1 addition & 1 deletion l10n/be.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ OC.L10N.register(
", {failed} failed": ", {failed} неудачно",
"0 = unlimited": "0 = неограниченно",
"A flow runs a series of steps when something happens — an object changes, a schedule fires, or you run it yourself. This list shows every app's flows.": "Паток запускае серыю крокаў, калі нешта адбываецца — аб'ект змяняецца, спрацоўвае расклад, або вы запускаеце яго самі. Гэты спіс паказвае патокі ўсіх праграм.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their personal settings, which are delivered even when the browser tab is closed.": "Пара ключоў VAPID наладжана. Карыстальнікі могуць уключыць апавяшчэнні браўзера ва ўласных наладах; яны дастаўляюцца нават тады, калі ўкладка браўзера закрыта.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their user settings, which are delivered even when the browser tab is closed.": "Пара ключоў VAPID наладжана. Карыстальнікі могуць уключыць апавяшчэнні браўзера ў наладах карыстальніка; яны дастаўляюцца нават тады, калі ўкладка браўзера закрыта.",
"A deactivation request is pending.": "Запрос на деактивацию ожидает обработки.",
"AI Assistant": "ИИ-помощник",
"AI Chat": "ИИ-чат",
Expand Down
2 changes: 1 addition & 1 deletion l10n/be.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
", {failed} failed": ", {failed} неудачно",
"0 = unlimited": "0 = неограниченно",
"A flow runs a series of steps when something happens — an object changes, a schedule fires, or you run it yourself. This list shows every app's flows.": "Паток запускае серыю крокаў, калі нешта адбываецца — аб'ект змяняецца, спрацоўвае расклад, або вы запускаеце яго самі. Гэты спіс паказвае патокі ўсіх праграм.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their personal settings, which are delivered even when the browser tab is closed.": "Пара ключоў VAPID наладжана. Карыстальнікі могуць уключыць апавяшчэнні браўзера ва ўласных наладах; яны дастаўляюцца нават тады, калі ўкладка браўзера закрыта.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their user settings, which are delivered even when the browser tab is closed.": "Пара ключоў VAPID наладжана. Карыстальнікі могуць уключыць апавяшчэнні браўзера ў наладах карыстальніка; яны дастаўляюцца нават тады, калі ўкладка браўзера закрыта.",
"A deactivation request is pending.": "Запрос на деактивацию ожидает обработки.",
"AI Assistant": "ИИ-помощник",
"AI Chat": "ИИ-чат",
Expand Down
2 changes: 1 addition & 1 deletion l10n/bg.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ OC.L10N.register(
", {failed} failed": ", {failed} неуспешни",
"0 = unlimited": "0 = неограничено",
"A flow runs a series of steps when something happens — an object changes, a schedule fires, or you run it yourself. This list shows every app's flows.": "Потокът изпълнява поредица от стъпки, когато нещо се случи — обект се променя, график се задейства или го стартирате сами. Този списък показва потоците на всички приложения.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their personal settings, which are delivered even when the browser tab is closed.": "Настроена е двойка ключове VAPID. Потребителите могат да включат известията в браузъра от личните си настройки; те се доставят дори когато разделът на браузъра е затворен.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their user settings, which are delivered even when the browser tab is closed.": "Настроена е двойка ключове VAPID. Потребителите могат да включат известията в браузъра от потребителските си настройки; те се доставят дори когато разделът на браузъра е затворен.",
"A deactivation request is pending.": "Заявка за деактивиране е в очакване.",
"AI Assistant": "AI асистент",
"AI Chat": "AI чат",
Expand Down
2 changes: 1 addition & 1 deletion l10n/bg.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
", {failed} failed": ", {failed} неуспешни",
"0 = unlimited": "0 = неограничено",
"A flow runs a series of steps when something happens — an object changes, a schedule fires, or you run it yourself. This list shows every app's flows.": "Потокът изпълнява поредица от стъпки, когато нещо се случи — обект се променя, график се задейства или го стартирате сами. Този списък показва потоците на всички приложения.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their personal settings, which are delivered even when the browser tab is closed.": "Настроена е двойка ключове VAPID. Потребителите могат да включат известията в браузъра от личните си настройки; те се доставят дори когато разделът на браузъра е затворен.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their user settings, which are delivered even when the browser tab is closed.": "Настроена е двойка ключове VAPID. Потребителите могат да включат известията в браузъра от потребителските си настройки; те се доставят дори когато разделът на браузъра е затворен.",
"A deactivation request is pending.": "Заявка за деактивиране е в очакване.",
"AI Assistant": "AI асистент",
"AI Chat": "AI чат",
Expand Down
2 changes: 1 addition & 1 deletion l10n/bs.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ OC.L10N.register(
", {failed} failed": ", {failed} neuspješno",
"0 = unlimited": "0 = neograničeno",
"A flow runs a series of steps when something happens — an object changes, a schedule fires, or you run it yourself. This list shows every app's flows.": "Tok pokreće niz koraka kada se nešto desi — objekat se promijeni, raspored se aktivira ili ga sami pokrenete. Ova lista prikazuje tokove svih aplikacija.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their personal settings, which are delivered even when the browser tab is closed.": "Par VAPID ključeva je konfigurisan. Korisnici mogu u ličnim postavkama uključiti obavijesti preglednika, koje se isporučuju čak i kada je kartica preglednika zatvorena.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their user settings, which are delivered even when the browser tab is closed.": "Par VAPID ključeva je konfigurisan. Korisnici mogu u korisničkim postavkama uključiti obavijesti preglednika, koje se isporučuju čak i kada je kartica preglednika zatvorena.",
"A deactivation request is pending.": "Zahtjev za deaktivaciju je na čekanju.",
"AI Assistant": "AI asistent",
"AI Chat": "AI razgovor",
Expand Down
2 changes: 1 addition & 1 deletion l10n/bs.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
", {failed} failed": ", {failed} neuspješno",
"0 = unlimited": "0 = neograničeno",
"A flow runs a series of steps when something happens — an object changes, a schedule fires, or you run it yourself. This list shows every app's flows.": "Tok pokreće niz koraka kada se nešto desi — objekat se promijeni, raspored se aktivira ili ga sami pokrenete. Ova lista prikazuje tokove svih aplikacija.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their personal settings, which are delivered even when the browser tab is closed.": "Par VAPID ključeva je konfigurisan. Korisnici mogu u ličnim postavkama uključiti obavijesti preglednika, koje se isporučuju čak i kada je kartica preglednika zatvorena.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their user settings, which are delivered even when the browser tab is closed.": "Par VAPID ključeva je konfigurisan. Korisnici mogu u korisničkim postavkama uključiti obavijesti preglednika, koje se isporučuju čak i kada je kartica preglednika zatvorena.",
"A deactivation request is pending.": "Zahtjev za deaktivaciju je na čekanju.",
"AI Assistant": "AI asistent",
"AI Chat": "AI razgovor",
Expand Down
2 changes: 1 addition & 1 deletion l10n/ca.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ OC.L10N.register(
", {failed} failed": ", {failed} fallits",
"0 = unlimited": "0 = il·limitat",
"A flow runs a series of steps when something happens — an object changes, a schedule fires, or you run it yourself. This list shows every app's flows.": "Un flux executa una sèrie de passos quan passa alguna cosa — un objecte canvia, una programació es dispara o l'executeu vós mateix. Aquesta llista mostra els fluxos de cada aplicació.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their personal settings, which are delivered even when the browser tab is closed.": "Hi ha un parell de claus VAPID configurat. Els usuaris poden activar les notificacions del navegador des de la configuració personal; s'entreguen fins i tot quan la pestanya del navegador està tancada.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their user settings, which are delivered even when the browser tab is closed.": "Hi ha un parell de claus VAPID configurat. Els usuaris poden activar les notificacions del navegador des de la configuració d'usuari; s'entreguen fins i tot quan la pestanya del navegador està tancada.",
"A deactivation request is pending.": "Hi ha una sol·licitud de desactivació pendent.",
"AI Assistant": "Assistent d'IA",
"AI Chat": "Xat d'IA",
Expand Down
2 changes: 1 addition & 1 deletion l10n/ca.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
", {failed} failed": ", {failed} fallits",
"0 = unlimited": "0 = il·limitat",
"A flow runs a series of steps when something happens — an object changes, a schedule fires, or you run it yourself. This list shows every app's flows.": "Un flux executa una sèrie de passos quan passa alguna cosa — un objecte canvia, una programació es dispara o l'executeu vós mateix. Aquesta llista mostra els fluxos de cada aplicació.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their personal settings, which are delivered even when the browser tab is closed.": "Hi ha un parell de claus VAPID configurat. Els usuaris poden activar les notificacions del navegador des de la configuració personal; s'entreguen fins i tot quan la pestanya del navegador està tancada.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their user settings, which are delivered even when the browser tab is closed.": "Hi ha un parell de claus VAPID configurat. Els usuaris poden activar les notificacions del navegador des de la configuració d'usuari; s'entreguen fins i tot quan la pestanya del navegador està tancada.",
"A deactivation request is pending.": "Hi ha una sol·licitud de desactivació pendent.",
"AI Assistant": "Assistent d'IA",
"AI Chat": "Xat d'IA",
Expand Down
2 changes: 1 addition & 1 deletion l10n/cs.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ OC.L10N.register(
", {failed} failed": ", {failed} selhalo",
"0 = unlimited": "0 = neomezeno",
"A flow runs a series of steps when something happens — an object changes, a schedule fires, or you run it yourself. This list shows every app's flows.": "Tok spustí sérii kroků, když se něco stane — objekt se změní, spustí se plán, nebo jej spustíte sami. Tento seznam zobrazuje toky všech aplikací.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their personal settings, which are delivered even when the browser tab is closed.": "Je nakonfigurován pár klíčů VAPID. Uživatelé si mohou v osobním nastavení zapnout oznámení v prohlížeči, která se doručují i při zavřené kartě prohlížeče.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their user settings, which are delivered even when the browser tab is closed.": "Je nakonfigurován pár klíčů VAPID. Uživatelé si mohou v uživatelském nastavení zapnout oznámení v prohlížeči, která se doručují i při zavřené kartě prohlížeče.",
"A deactivation request is pending.": "Žádost o deaktivaci čeká na vyřízení.",
"AI Assistant": "AI asistent",
"AI Chat": "AI chat",
Expand Down
2 changes: 1 addition & 1 deletion l10n/cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
", {failed} failed": ", {failed} selhalo",
"0 = unlimited": "0 = neomezeno",
"A flow runs a series of steps when something happens — an object changes, a schedule fires, or you run it yourself. This list shows every app's flows.": "Tok spustí sérii kroků, když se něco stane — objekt se změní, spustí se plán, nebo jej spustíte sami. Tento seznam zobrazuje toky všech aplikací.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their personal settings, which are delivered even when the browser tab is closed.": "Je nakonfigurován pár klíčů VAPID. Uživatelé si mohou v osobním nastavení zapnout oznámení v prohlížeči, která se doručují i při zavřené kartě prohlížeče.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their user settings, which are delivered even when the browser tab is closed.": "Je nakonfigurován pár klíčů VAPID. Uživatelé si mohou v uživatelském nastavení zapnout oznámení v prohlížeči, která se doručují i při zavřené kartě prohlížeče.",
"A deactivation request is pending.": "Žádost o deaktivaci čeká na vyřízení.",
"AI Assistant": "AI asistent",
"AI Chat": "AI chat",
Expand Down
2 changes: 1 addition & 1 deletion l10n/da.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ OC.L10N.register(
", {failed} failed": ", {failed} mislykkedes",
"0 = unlimited": "0 = ubegrænset",
"A flow runs a series of steps when something happens — an object changes, a schedule fires, or you run it yourself. This list shows every app's flows.": "Et flow kører en række trin, når noget sker — et objekt ændres, en tidsplan udløses, eller du kører det selv. Denne liste viser alle appers flows.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their personal settings, which are delivered even when the browser tab is closed.": "A VAPID keypair is configured. Users can opt in to browser notifications from their personal settings, which are delivered even when the browser tab is closed.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their user settings, which are delivered even when the browser tab is closed.": "Der er konfigureret et VAPID-nøglepar. Brugere kan tilmelde sig browsernotifikationer i deres brugerindstillinger, som leveres, selv når browserfanen er lukket.",
"A deactivation request is pending.": "En anmodning om deaktivering afventer.",
"AI Assistant": "AI-assistent",
"AI Chat": "AI-chat",
Expand Down
2 changes: 1 addition & 1 deletion l10n/da.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
", {failed} failed": ", {failed} mislykkedes",
"0 = unlimited": "0 = ubegrænset",
"A flow runs a series of steps when something happens — an object changes, a schedule fires, or you run it yourself. This list shows every app's flows.": "Et flow kører en række trin, når noget sker — et objekt ændres, en tidsplan udløses, eller du kører det selv. Denne liste viser alle appers flows.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their personal settings, which are delivered even when the browser tab is closed.": "A VAPID keypair is configured. Users can opt in to browser notifications from their personal settings, which are delivered even when the browser tab is closed.",
"A VAPID keypair is configured. Users can opt in to browser notifications from their user settings, which are delivered even when the browser tab is closed.": "Der er konfigureret et VAPID-nøglepar. Brugere kan tilmelde sig browsernotifikationer i deres brugerindstillinger, som leveres, selv når browserfanen er lukket.",
"A deactivation request is pending.": "En anmodning om deaktivering afventer.",
"AI Assistant": "AI-assistent",
"AI Chat": "AI-chat",
Expand Down
Loading
Loading