Compare commits

..
7 Commits
Author SHA1 Message Date
NotAlexNoyleandClaude Opus 5.5 860a385496 Record TrueOG's WeKan deployment in trueog/
Environment (secrets replaced by placeholders), OpenRC and nginx files, the
Staff-Auth sign-in setup and Admin Panel settings, the trueog-wekan-authwatch
service with its installer and tests, and the step-by-step upgrade helper with
its patches, as deployed on 2026-11-11.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MpagfNzrTjLo49dfEEBxnF
2026-11-11 07:42:47 -05:00
NotAlexNoyleandClaude Opus 5.5 1c70df29a2 OIDC sign-ups need no invitation code when registration is disabled
With registration disabled, Users.after.insert demanded an invitation code for
every new OAuth2 account, so a first sign-in through the OIDC provider created
the account and then failed with error-invitation-code-not-exist. Accounts
created by the OIDC service skip that check; the identity provider decides who
gets in. Password registration stays closed. Live on 13.06 through
wekan-patch-13.06.py (oidcSignup).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MpagfNzrTjLo49dfEEBxnF
2026-11-11 05:15:18 -05:00
NotAlexNoyleandClaude Opus 5.5 8bdf86eaef Merge upstream WeKan v13.06
Keeps the TrueOG changes on top of upstream v13.06:
- .gitattributes and .gitea/CODEOWNERS (one staff approval)
- minicardOverrides.css hides the minicard completion checkbox (import moved after the last card stylesheet)
- setBoardTeams adds every member of an assigned active team on the server, since a board admin who is not a
  site admin cannot see other users' teams in the browser
- app.env and the AUR wekan.env example are not tracked, and .gitignore excludes .env files

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MpagfNzrTjLo49dfEEBxnF
2026-11-10 21:42:21 -05:00
NotAlexNoyle 6e4c0539af Exclude CODEOWNERS from language statistics 2026-10-31 16:52:22 -04:00
NotAlexNoyle b8fcef2fd4 Add CODEOWNERS (one staff approval) 2026-10-31 16:52:21 -04:00
NotAlexNoyle 4e2e6adc73 Fix card details import 2026-06-13 11:54:24 -04:00
NotAlexNoyle 091541a960 Hide minicard completion checkbox 2026-06-13 11:52:03 -04:00
357 changed files with 2685 additions and 4281 deletions

No files matched your search

+2 -1
View File
@@ -1,3 +1,4 @@
* text=auto eol=lf
*.{cmd,[cC][mM][dD]} text eol=crlf
*.{bat,[bB][aA][tT]} text eol=crlf
*.{bat,[bB][aA][tT]} text eol=crlf
.gitea/CODEOWNERS linguist-detectable=false
+3
View File
@@ -0,0 +1,3 @@
# Pull requests request review from the eligible staff team(s).
# One approval from either an Admin or Developer satisfies branch protection.
* @trueog/Admins @trueog/Developers
+4 -26
View File
@@ -4533,10 +4533,7 @@ jobs:
snap-auth-check:
needs: [prepare]
runs-on: ubuntu-24.04
# Room for all five snapcraft install attempts (each at most 3 minutes,
# 30 s apart) and the whoami after them: at 10 minutes (v13.09) the job
# was cancelled during the third.
timeout-minutes: 25
timeout-minutes: 10
steps:
- name: Ask the Snap Store whether SNAP_AUTH is usable
env:
@@ -4560,23 +4557,7 @@ jobs:
;;
esac
# The Snap Store has bad minutes - a rate limit, or (v13.07) a refresh
# that timed out - so the install is retried as the build job's is;
# an outage is said as one, not as a broken credential. Each attempt
# is bounded: in v13.09 the third hung silently until the job was
# cancelled. An attempt cut short leaves snapd's install change
# running, so it is aborted before the next.
installed=""
for i in 1 2 3 4 5; do
if timeout 180 sudo snap install snapcraft --classic; then installed=1; break; fi
sudo snap abort --last=install >/dev/null 2>&1 || true
echo "snapcraft install attempt $i/5 failed (Snap Store unreachable, throttling or hanging); retrying in 30s..."
sleep 30
done
if [ -z "$installed" ]; then
echo "::error::snapcraft could not be installed after 5 attempts: the Snap Store did not answer. That is the store, not SNAP_AUTH - re-run the job."
exit 1
fi
sudo snap install snapcraft --classic
# whoami writes its answer to stdout and its complaint to stderr; both
# matter, so both are captured.
@@ -4973,11 +4954,8 @@ jobs:
run: |
set -uo pipefail
for i in 1 2 3 4 5; do
# Bounded, as snap-auth-check's: a hanging store is a failed
# attempt, not a job that waits until it is cancelled.
timeout 180 sudo snap install snapcraft --classic && exit 0
sudo snap abort --last=install >/dev/null 2>&1 || true
echo "snapcraft install attempt $i/5 failed (Snap Store throttle or hang?); retrying in 30s..."
sudo snap install snapcraft --classic && exit 0
echo "snapcraft install attempt $i/5 failed (Snap Store throttle?); retrying in 30s..."
sleep 30
done
echo "::error::snapcraft install failed after 5 attempts (Snap Store rate limit)."
+18 -33
View File
@@ -150,46 +150,27 @@ jobs:
node-version: ${{ steps.fetch.outputs.node_version }}
# A 32-bit target's SEA blob must be written by a 32-bit Node.js: the blob
# stores its lengths as size_t (build.mjs refuses otherwise). An i386
# Node.js writes it for every 32-bit target - win32, i386 and 32-bit ARM
# read the same little-endian format - but it has to be the SAME VERSION
# the target's bundle embeds (build.mjs checks that too). v13.07 took the
# i386 bundle's own Node.js, and the bundles resolve the newest Node.js of
# the pinned major per platform: i386 got v26.13.1 while 32-bit ARM still
# had v26.13.0, and armhf, armv6 and armv7 all stopped on "The bundle's
# Node.js is v26.13.0 but this is v26.13.1". So the host is resolved at
# the target bundle's exact version, from the same three sources and with
# the same published SHA256 as a bundle's Node.js.
# stores its lengths as size_t (build.mjs refuses otherwise). The i386
# bundle's Node.js, of the same version, writes it for every 32-bit
# target - win32, i386 and 32-bit ARM read the same little-endian format.
- name: A 32-bit Node.js to build a 32-bit target
id: host32
if: steps.fetch.outputs.skip != 'true' && contains(fromJSON('["win32","i386","armv7","armhf","armv6"]'), matrix.target)
env:
NODE_VERSION: ${{ steps.fetch.outputs.node_version }}
GH_TOKEN: ${{ github.token }}
VERSION: ${{ steps.fetch.outputs.version }}
run: |
set -euo pipefail
mkdir -p host32 .tools/tmp
export TMPDIR="$PWD/.tools/tmp"
rc=0
src="$(bash releases/resolve-node-source.sh i386 "$NODE_VERSION")" || rc=$?
[ "$rc" = 0 ] || { echo "::error::$TARGET needs an i386 Node.js $NODE_VERSION to build its single file, and none of the three Node.js sources has one."; exit 1; }
node_url="$(printf '%s\n' "$src" | sed -n 's/^node_url=//p')"
node_kind="$(printf '%s\n' "$src" | sed -n 's/^node_kind=//p')"
node_member="$(printf '%s\n' "$src" | sed -n 's/^node_member=//p')"
node_sha256="$(printf '%s\n' "$src" | sed -n 's/^node_sha256=//p')"
bash releases/fetch.sh -o host32/download "$node_url"
echo "$node_sha256 host32/download" | sha256sum -c -
case "$node_kind" in
binary) mv host32/download host32/node ;;
tar.xz) tar -xJf host32/download -C host32 "$node_member" && mv "host32/$node_member" host32/node && rm -f host32/download ;;
*) echo "::error::An i386 Node.js comes as a binary or a tar.xz, not $node_kind."; exit 1 ;;
esac
chmod +x host32/node
zip="wekan-${VERSION}-i386.zip"
mkdir -p host32
gh release download "$TAG" --repo "$GITHUB_REPOSITORY" --pattern "$zip" --pattern "$zip.sha256sum" --dir host32 \
|| { echo "::error::$TARGET needs the i386 bundle's Node.js to build, and $TAG has no $zip."; exit 1; }
(cd host32 && sha256sum -c "$zip.sha256sum" && unzip -q "$zip" 'bundle/node' 'bundle/node-runtime/*' && rm -f "$zip")
sudo dpkg --add-architecture i386
sudo apt-get update -qq
sudo apt-get install -y -qq libc6:i386 libstdc++6:i386 libatomic1:i386 >/dev/null
host="$PWD/host32/node"
got="$("$host" -p process.version)"
[ "$got" = "$NODE_VERSION" ] || { echo "::error::The i386 Node.js resolved for $NODE_VERSION reports $got."; exit 1; }
sudo apt-get install -y -qq libc6:i386 libstdc++6:i386 >/dev/null
host="$PWD/host32/bundle/node"
[ -d host32/bundle/node-runtime ] && echo "libs=$PWD/host32/bundle/node-runtime" >> "$GITHUB_OUTPUT"
echo "node=$host" >> "$GITHUB_OUTPUT"
# A 32-bit ELF target's blob is injected in a 64-bit process, by
# LIEF 1.0.0 - the version Node.js vendors - not inside this 32-bit
@@ -206,16 +187,20 @@ jobs:
env:
VERSION: ${{ steps.fetch.outputs.version }}
HOST_NODE: ${{ steps.host32.outputs.node }}
HOST_LIBS: ${{ steps.host32.outputs.libs }}
SEA_PYTHON: ${{ steps.host32.outputs.python }}
run: |
set -euo pipefail
case "$TARGET" in win*) ext=.exe ;; *) ext= ;; esac
out="wekan-${VERSION}-${TARGET}-single-file${ext}"
# The i386 Node.js finds its own libraries; the libraries are ignored by
# the x64 Node.js that runs build.mjs (another architecture).
# Exit 3: this Node.js is one LIEF cannot inject the SEA into
# correctly (releases/single-file/sea-inject.mjs says which and why).
# That is a missing single file, not a failed release.
rc=0
node releases/single-file/build.mjs --bundle bundle --target "$TARGET" --version "$VERSION" --out "$out" \
LD_LIBRARY_PATH="${HOST_LIBS:-${LD_LIBRARY_PATH:-}}" \
node releases/single-file/build.mjs --bundle bundle --target "$TARGET" --version "$VERSION" --out "$out" \
${HOST_NODE:+--host-node "$HOST_NODE"} 2> build.err || rc=$?
cat build.err >&2
rm -rf bundle
+5
View File
@@ -126,3 +126,8 @@ mongo-tools-patches/
# Generated on the Windows single-EXE runner (releases/append-windows-payload.mjs --manifest)
wekan-real-files.h
# TrueOG: never track .env files
.env
*.env
.env.*
+213 -382
View File
@@ -124,388 +124,6 @@ its reason.
</details>
# v13.11 2026-11-13 WeKan ® release
**In short:** The **file-integrity scan** stops reporting attachments and
avatars that WeKan deleted itself as missing, which had buried real
**StorageBleed** findings under thousands of false ones. The recurring-checklist
reset no longer scans every **checklist** on each tick. In the **REST API**, a
refused custom-field update changes nothing, ownership transfer takes only the
boards the user administers, and deleting a missing integration answers 404.
This release fixes the following bugs:
**The file-integrity scan** - what it counts as a missing file.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/ec05ff008928c390b11fec225c564f2dd209ec7f">Files WeKan deleted or moved itself are no longer reported missing</a>. Thanks to Raymond-Voogt and xet7.</summary>
The daily scan keeps one baseline per stored file and reports a baseline whose
file is gone as a StorageBleed. Nothing removed a baseline, so every attachment
the retention purge deleted and every avatar a user deleted was reported on
every run from then on; one finding was folded 1,164 times. The baseline is now
forgotten in Attachments and Avatars `onAfterRemove`, for every version path.
That is the retention purge's path: Meteor-Files unlinks the files itself after
that hook, without going through the store strategy. It is also forgotten in
the filesystem strategy's `unlink()` and, for the old path, in `rename()`. A
file that vanishes any other way keeps its baseline and is still reported.
Baselines orphaned before this fix stay until removed, as
[#6898](https://github.com/wekan/wekan/issues/6898) describes.
`tests/integrityBaselineForgottenOnDelete.test.cjs` fails on a delete or rename
in the filesystem strategy that does not forget its baseline, and
`tests/playwright/specs/integrity-baseline-on-delete.e2e.js` deletes an avatar
in the UI.
</details>
**Database indexes** - the queries the background jobs make.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/c37575f1faff4e8ca518c7eae0ba7e50d05c1fae">The recurring-checklist reset reads only recurring checklists</a>. Thanks to Raymond-Voogt and xet7.</summary>
The reset cron asks for every checklist with a `resetInterval` on each tick,
and with no index that read the whole collection (about 45,000 documents on the
reporting instance), shown as a collection scan on Admin Panel / Problems. A
partial index on `resetInterval`, like the one recurring cards got, holds only
the recurring checklists. `tests/checklistResetIndex.test.cjs` pins the index
and a selector that can use it.
</details>
**The REST API** - custom fields, ownership transfer and integrations.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/a81ec6ecdfea8a0b0709d7c0cd463cfd051ca80f">A refused custom-field update leaves the whole field unchanged</a>. Thanks to AhmedLukman and xet7.</summary>
`PUT /api/boards/:boardId/custom-fields/:customFieldId` wrote each property
with its own update, so a refused `type` or `settings` left the name and flags
sent before it already saved. The properties are now saved in one board-scoped
update that the schema accepts or refuses as a whole. Authorization, the field
allowlist and the reply are unchanged. `tests/restCustomFieldUpdate.test.cjs`
and `tests/playwright/specs/rest-custom-field-update.e2e.js` cover both.
</details>
<details>
<summary><a href="https://github.com/wekan/wekan/commit/4b4db92a1b97eae43770e56082012073d87c4c9a">Ownership transfer takes only the boards the user administers</a>. Thanks to AhmedLukman and xet7.</summary>
`takeOwnership` selected boards where the user was a member and somebody, not
necessarily the user, was an administrator. The user and the administrator flag
are now matched on the same member, so a board where the user is an ordinary
member is left as it is. `tests/restOwnershipSelection.test.cjs` and
`tests/playwright/specs/rest-ownership-selection.e2e.js` cover it.
</details>
<details>
<summary><a href="https://github.com/wekan/wekan/commit/ab685a7f6fe0450a31b9150a14b17b909933c86f">Deleting a missing or another board's integration answers 404</a>. Thanks to AhmedLukman and xet7.</summary>
`DELETE /api/boards/:boardId/integrations/:intId` answered 200 for an
integration that did not exist, was on another board or was already deleted,
because the removal matched nothing and the reply did not check. It now looks
the integration up on that board first, after the board-admin check, like PUT
and the activities routes, and answers the same JSON 404. Server errors still
answer 500. `tests/restIntegrationWriteRoutes404.test.cjs` and
`tests/playwright/specs/rest-integration-update.e2e.js` cover it, including
the board's webhook settings.
</details>
<details>
<summary><a href="https://github.com/wekan/wekan/commit/a8e25952aa6b244b76891c3fa3cdc1779d35a78f">Ownership transfer finishes before it replies, and a deleted account leaves the board when removed</a>. Thanks to xet7.</summary>
`takeOwnership` called the async `changeOwnership()` without `await`, so the
reply was sent before the board changed and a failed update was an unhandled
rejection behind a 200. `Boards.removeMember` tested
`!ReactiveCache.getUser(id)`, which on the server is a Promise and always
truthy. Because of that, the branch that removes a member whose account was
deleted never ran there, and that member only lingered as inactive. Both
calls are awaited now. `tests/reactiveCacheNegatedAwait.test.cjs` fails on any
negated un-awaited `ReactiveCache` lookup in `server/` or `models/`.
</details>
Thanks to above GitHub users for their contributions and translators for their translations.
# v13.10 2026-11-13 WeKan ® release
**In short:** The release's **Snap Store** credential check bounds each
snapcraft install attempt, so a Snap Store that hangs no longer stops a release.
This release has the following developer-tooling fix:
**Release builds** - the snap jobs.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/560ff74a79f8c998bd0aa4fd63664155eecd5f28">Every snapcraft install attempt is bounded, and snap-auth-check has room for all five</a>. Thanks to xet7.</summary>
In the v13.09 release the Snap Store failed snap-auth-check's first two
snapcraft install attempts and then let the third hang with no output, until
the job's 10-minute timeout cancelled it - the retry never got its remaining
turns. Each `snap install snapcraft` in the release workflow now runs under
`timeout 180`, an attempt cut short is aborted (`snap abort --last=install`)
so the next one does not meet snapd's change still in progress, and
snap-auth-check's job timeout is 25 minutes, enough for all five attempts.
`tests/snapAuthPreflight.test.cjs` fails on an unbounded install, a retry
without the abort, or a job timeout that cannot hold five attempts.
</details>
Thanks to above GitHub users for their contributions and translators for their translations.
# v13.09 2026-11-12 WeKan ® release
**In short:** The release's **Snap Store** credential check retries installing
snapcraft, so one Snap Store timeout no longer stops a release.
This release has the following developer-tooling fix:
**Release builds** - the snap jobs.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/534646347c4b6467f539cb01171487d27fc7ddc7">snap-auth-check retries installing snapcraft, as the snap build job does</a>. Thanks to xet7.</summary>
The v13.08 release stopped in snap-auth-check before it asked the Snap Store
anything: the one `snap install snapcraft` timed out reaching api.snapcraft.io,
while the snap build job already retried five times. The check retries the
same way now, and when every attempt fails it says the store did not answer
rather than that SNAP_AUTH is wrong. `tests/snapAuthPreflight.test.cjs` fails on
any snapcraft install in any workflow without the retry.
</details>
Thanks to above GitHub users for their contributions and translators for their translations.
# v13.08 2026-11-12 WeKan ® release
**In short:** The **REST API** creates a card under the **parent** it is given,
and a refused **integration URL** no longer leaves the other fields of the same
update written. The **single-file** WeKan for **32-bit ARM** builds again, with
an i386 Node.js of the exact version its bundle embeds. A **GitHub CodeQL**
alert in the security alert download script is fixed.
This release fixes the following SECURITY ISSUES found by GitHub CodeQL code scanning:
<details>
<summary><a href="https://github.com/wekan/wekan/commit/ed19817433e14ef4f8cb7d9623f5d8b84a1794ff">The security alert download summary carries no secret scanning field, and kept secrets are owner-only</a>. Thanks to GitHub CodeQL and xet7.</summary>
Code scanning alert #604 (`py/clear-text-storage-sensitive-data`, CWE-312):
`releases/sec/download_github_security.py` wrote a secret scanning alert's type
name into `SUMMARY.md`. That was the type of the secret, not the secret, but
`SUMMARY.md` is never redacted, so it now names only the kind of finding and
points at `secret-scanning/`. With `--include-secret-values` the files that hold
the secrets are created readable by their owner only.
`tests/securityDownloadScript.test.cjs` pins both, and that no secret scanning
field reaches the summary. This is a maintainer tool, not WeKan's server, so
there is no attempt for Admin Panel → Problems to record.
</details>
and fixes the following bugs:
**The REST API** - creating cards and updating integrations.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/552950ed637d6ddeb486322e3c08dd61dbfc13dc">A card created with a parentId is created under that parent</a>. Thanks to AhmedLukman and xet7.</summary>
`POST /api/boards/:boardId/lists/:listId/cards` read `parentId` from the URL
parameters, which that route does not have, so the parent in the request body
was ignored: it was never stored, and the visibility check for the parent
(GHSA-jvv9-498p-hxrg) never saw it. It is read from the body now, as the bulk
endpoint does. A parentId that is not a string is refused with 400, and a parent
on a board the caller cannot see is still refused and recorded under
ParentBleed. `tests/restCardParent.test.cjs` and
`tests/playwright/specs/rest-card-parent.e2e.js` cover a stored parent, the
subtask it renders as, an empty parent and the refused requests.
</details>
<details>
<summary><a href="https://github.com/wekan/wekan/commit/1418cb8480e0ca13ccecc54290b16c36d40f82a6">An integration update with a refused URL changes nothing</a>. Thanks to AhmedLukman and xet7.</summary>
`PUT /api/boards/:boardId/integrations/:intId` wrote `enabled` and `title`
before it checked the new URL against the SSRF rules (GHSA-hc3x-hq3m-663q), so a
request whose URL was refused with 400 had already changed those two fields. The
URL is validated first now, like the delivery settings, and a refused request
leaves the integration as it was. `tests/restIntegrationUpdate.test.cjs` and its
Playwright spec pin the order.
</details>
and has the following developer-tooling fixes:
**Release builds** - the single-file executables.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/c35c672ffb398b68be22f257087db28738eb4701">The 32-bit host Node.js of a single file is its bundle's exact version</a>. Thanks to xet7.</summary>
The v13.07 single files for armhf, armv6 and armv7 stopped on "The bundle's
Node.js is v26.13.0 but this is v26.13.1". A 32-bit target's SEA blob is
written by a 32-bit Node.js, and `.github/workflows/single-file.yml` borrowed
the i386 bundle's. Each bundle takes the newest Node.js of the pinned major its
platform has, so i386 had v26.13.1 while 32-bit ARM had v26.13.0. The host is
now resolved with `releases/resolve-node-source.sh` at the target bundle's exact
version, checked against its published SHA256, and refused unless it reports
that version. `tests/singleFile.test.cjs` pins all three, and that the host is
never taken from another platform's bundle.
</details>
**Browser tests** - what a spec may rely on from the database.
- [list-sync-estimate's checkbox test no longer depends on the order an index returns](https://github.com/wekan/wekan/commit/af76406d127568b45b0e76659160a8821cdf00a2) -
it expected an unsorted find of activities in insertion order, which
activities' cardId/createdAt index returns newest first. Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v13.07 2026-11-12 WeKan ® release
**In short:** **ListLockAttachBleed** is fixed: when a list refuses a role
write access, that refusal now also holds for the attachment API's upload,
delete, copy and move. **CodeQL** alerts #602 and #603 in the tests are fixed,
**fast-xml-parser** is updated to 5.12.0, spent time reads as a **duration**,
the **indexes** that LDAP, card member and History queries need are added, and
Admin Panel → Problems can **Clear** resolved problems, which also age out.
This release fixes the following CRITICAL SECURITY ISSUE of [ListLockAttachBleed](https://wekan.fi/hall-of-fame/listlockattachbleed/):
<details>
<summary><a href="https://github.com/wekan/wekan/commit/7bb3e13ba9">A list that refuses a role write access refuses its attachment API writes too</a>. Thanks to Furkan Derse and xet7.</summary>
[ListLockAttachBleed](https://wekan.fi/hall-of-fame/listlockattachbleed/),
reported by email, its GitHub security advisory awaited. A board admin can
refuse a role write access in one list (#4527). The card screen, the card and
checklist routes ([ListLockBleed](https://wekan.fi/hall-of-fame/listlockbleed/))
and the interface's own attachment upload and delete applied that refusal, but
the attachment API's upload, delete, copy and move, over REST and DDP, asked
only for board write access and the assigned-only rule. A normal member the
list refused could therefore still add and remove files on its cards. Every
attachment write that names a card now asks that card's list as well, a move
both the card it takes the file from and the one it puts it on, and the
refusal shows in Admin Panel / Problems. `tests/listLockAttachments.test.cjs`
runs the guard on the reported case and fails on any attachment write in the
tree without the list check beside it, and
`tests/playwright/specs/list-lock-attachments.e2e.js` replays the writes
against a running server.
</details>
and fixes the following SECURITY ISSUES found by GitHub CodeQL code scanning:
<details>
<summary><a href="https://github.com/wekan/wekan/commit/2b65b713a0f7b537efbe7c25bb2a8b454e88d1ad">Alerts #602 and #603: no test hands a path to a shell at all</a>. Thanks to GitHub CodeQL and xet7.</summary>
The fix for #601 passed the paths to `bash -c` as arguments rather than
pasting them into the script, but that still hands a temporary path to a
shell, and CodeQL flagged the two umask tests in
`tests/releaseDownloads.test.cjs` again. They no longer use a shell: `fetch.sh`
runs as bash's program with its arguments, the umask is set on the test's
process and put back, and `chmod +x` is `fs.chmodSync`. The macOS sandbox test
runs its probes as programs the same way. The guard now refuses any value
given to a shell's `-c` script as an argument, and found one more test doing
it. The findings were in tests, not in WeKan, so there is no attempt to show in
Admin Panel → Problems.
</details>
and adds the following new features:
**The Admin Panel** - Problems, and getting rid of the ones that are handled.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/fefabbf113">Problems has a Clear button, and resolved problems age out on their own</a>. Thanks to Raymond-Voogt and xet7.</summary>
The problem streams were append-only, and Acknowledge only reset the "new"
count, so a problem fixed long ago stayed in the table and buried the ones
that are live now. Clear, beside Acknowledge, calls the admin-only
`clearEventLog`, which deletes the checked streams' events up to now and
stamps the acknowledgement. Anything that happens after the click shows as a
new problem again, and an unknown stream in the list clears nothing. A daily
sweep, claimed once per installation, deletes events older than
`EVENTLOG_RETENTION_DAYS` (default 90, `0` keeps them forever); a recurring
problem's folded row keeps a recent date, so it stays. The setting is listed
on every platform and in the Helm chart, and the button is translated to
every language. `tests/eventLogClearAndRetention.test.cjs` runs Clear and the
sweep on an in-memory log, including a non-admin and an unknown stream, and
`tests/playwright/specs/problems-clear.e2e.js` clears one stream in the UI.
</details>
and updates the following dependencies:
- [**fast-xml-parser 5.11.2 → 5.12.0**](https://github.com/wekan/wekan/commit/a76a19058ac896651ccd30311c36d48ee7f47b86) — Dependabot
alert #188: with `stopNodes`, an unterminated stop node made it rescan the
rest of the input from every `<`, O(n²) CPU; 5.12.0 stops at the first
failed scan. Brought in by the Azure and Google Cloud storage clients. The
test runs the alert's input and pins that no lockfile resolves an older
version. Thanks to dependabot.
and fixes the following bugs:
**Cards** - how spent time is shown.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/3e8e8039ff">Spent time is shown as a duration, not decimal hours</a>. Thanks to brlin-tw and xet7.</summary>
A card's spent time showed as decimal hours, such as 12.58 for 12 hours and
35 minutes, which reads as twelve hours and fifty-eight minutes. The badge now
shows `12h35m`, drops the units that are zero and shows `0s` for none, and its
tooltip keeps the rounded hours. The formatter is
`models/lib/spentTimeFormat.js`; `tests/spentTimeFormat.test.cjs` pins it and
`tests/playwright/specs/spent-time-format.e2e.js` checks the badge. A
follow-up imports it the way `cardTime.js` imports its other helpers.
</details>
**The REST API** - logging out a token.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/fd59a8ff70">POST /api/deletetoken waits for the token to be deleted before answering</a>. Thanks to AhmedLukman and xet7.</summary>
`Accounts.destroyToken` was not awaited, so the route answered success before
the token was gone, and a failed database write never reached its error
handler. It is awaited now. `tests/restTokenRevocation.test.cjs` covers a slow
and a failed deletion, authorization and session isolation, and
`tests/playwright/specs/rest-token-revocation.e2e.js` logs a browser out with
it.
</details>
**Database indexes** - the queries that scanned whole collections.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/8dc77a89d8">Indexes for the LDAP id, cards' assignees and members, and History by entity and hash</a>. Thanks to Raymond-Voogt and xet7.</summary>
An LDAP login looked the user up by `services.ldap.id`, a member's cards were
found by `assignees` and `members`, and the card history by entity and by
integrity hash, all without an index, so each scanned its whole collection on
a large installation. They have indexes now, the LDAP one sparse.
`tests/cardQueryIndexes.test.cjs` and `tests/ldapAndHistoryIndexes.test.cjs`
pin them.
</details>
and adds the following developer tool:
<details>
<summary><a href="https://github.com/wekan/wekan/commit/801f8956fe813a5da0264abf660c18363d2d3bc2">releases/sec downloads a GitHub organization's Security and quality alerts with gh</a>. Thanks to xet7.</summary>
`releases/sec/download-github-security.sh wekan` saves every repository's
Dependabot, code scanning, secret scanning and security advisory alerts to
`.tools/log/sec/<organization>/<repository>/<YYYY-MM-DD_HH-MM-SS>/`, a
directory per kind with a file per alert and a `SUMMARY.md` of the open ones.
It runs the GitHub CLI outside the editor's sandbox, where `gh` and its login
are, so the alerts can be read and fixed from the files inside it. A kind
GitHub does not answer is recorded with its reason, a secret scanning alert's
secret is redacted unless asked for, and a name that is not a GitHub name is
refused before it becomes a path. The test runs it against a stand-in `gh`;
see `releases/sec/README.md`.
</details>
Thanks to above GitHub users for their contributions and translators for their translations.
# v13.06 2026-11-11 WeKan ® release
**In short:** **CodeQL** alert #601 in a test is fixed, with two more tests
@@ -8628,3 +8246,216 @@ plan.
</details>
Thanks to above GitHub users for their contributions and translators for their translations.
# v12.42 2026-10-14 WeKan ® release
**In short:** a new **Version Control** board view shows a board as a
**GitHub** or **Gitea** issue tracker, with releases, a **wiki** and history
with undo, and a whole **GitHub organization** imports into it, its **GitHub
Actions** as Rules. Optional **Trello**, **Jira**, **GitHub** and **Gitea**
compatible APIs let their clients use WeKan as a backend. Old boards get their
keys in one pass, list sync keeps issue details current, any board view can be
a **read-only public view**, and WeKan has **Android** bundles.
This release adds the following new features:
**Board views** - a repository's issue tracker as a view, and which views the
public sees.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/326d9bbf61">Version Control: the board as a GitHub or Gitea issue tracker</a>. Thanks to xet7.</summary>
Board → View → **Version Control**, in the board's own theme. A card is an
issue: open, or closed when archived, in a list named *Closed*, *Done*,
*Resolved*, *Merged* or *Wontfix*, or closed upstream. The issue number is
the upstream one of an imported issue, else the card number. The board's
labels are labels, and labels with a due date and the importers'
`milestone:` labels are milestones, with progress bars. Comments are the
conversation, attachments the files. The search box takes GitHub's words:
`is:open`, `label:`, `-label:`, `milestone:`, `author:`, `assignee:@me`,
`no:label` and `sort:`. **New issue**, **Close** and **Reopen** write through
the ordinary collections, so the **History** tab (the board's history table)
shows them and **Restore** undoes them. A synced issue is closed in its
tracker. **Import** opens the GitHub, GitLab, Gitea and Forgejo importers, and
each synced list has a **Sync now** button. Visitors see it read-only. Tested
by `tests/versionControlView.test.cjs`. See
[Version Control view](docs/Features/Board/Version-Control-View.md).
</details>
<details>
<summary><a href="https://github.com/wekan/wekan/commit/326d9bbf61">A public board's public views are for the public; its members keep theirs</a>. Thanks to xet7.</summary>
Board Settings → Board View's *Show on* and *Default on Public Board* now
apply to the people looking who are not members: visitors who are not logged
in, and logged-in users who are not on the board. The board's members get the
*Private* columns. So a public board can open read-only in Version Control,
Email, Chat or any other view for the world, and list only the views chosen
for it, while its members keep every view. Before, a public board's members
had the public menu too. `boardViewAudience` in
`models/lib/boardViewSettings.js`; `tests/boardViewSettings.test.cjs` covers
visitors, non-members, former members and members.
</details>
**Import and sync** - what an issue tracker's issues bring with them.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/326d9bbf61">GitHub, GitLab, Gitea and Forgejo issues bring their files</a>. Thanks to xet7.</summary>
The files an issue or its comments link or carry become card attachments in
Admin Panel → Attachments → Default Storage. These are GitHub
`user-attachments` and `user-images` links, GitLab `/uploads/` links, and
Gitea and Forgejo assets and `/attachments/<uuid>` links, at most 50 per
issue. Each one is downloaded through the import's SSRF guard, which checks
every redirect hop, and the upload checks its type and size. One that cannot
be fetched is on the import's loss report. Ordinary links are not files.
`models/lib/issueAttachments.js`; `tests/issueAttachments.test.cjs`.
</details>
<details>
<summary><a href="https://github.com/wekan/wekan/commit/326d9bbf61">List sync can bring each issue's comments, labels, state and files</a>. Thanks to xet7.</summary>
A new Sync option for GitHub, GitLab, Gitea and Forgejo, off by default.
Comments come from one paged repository-wide list (GitHub and Gitea), or
from each issue's notes (GitLab). They are keyed by the tracker's comment id,
and an edit upstream updates them. A label sync added and the issue lost is
taken off, and labels added in WeKan stay. Each file is downloaded once. It
runs after a successful sync as a step of its own, so a failure is shown and
retried and never undoes the title and description sync. Gitea issues are
fetched with `type=issues`. A rate-limited answer is waited out once when it
frees up within a minute; otherwise the run ends with the time to try again.
`tests/listSyncIssueDetails.test.cjs`.
</details>
<details>
<summary><a href="https://github.com/wekan/wekan/commit/935e68dfdd">A whole GitHub organization imports, each repository as its own board</a>. Thanks to xet7.</summary>
Import → GitHub → **Import a whole GitHub organization**: every repository of
an organization or user becomes a board named `owner/repository`, opening in
Version Control. Issues go through the ordinary `importBoard`, run as the
person who started the job, with their comments, labels and files. Releases
are cards in a *Releases* list, with their files attached only when chosen.
`.github/workflows` files become Rules. Each wiki is read from its git
repository with isomorphic-git (1.42.4, pinned), with every request through
the SSRF guard and only to github.com. A page is a card in the *Wiki* list:
its `[[links]]` point at the linked pages' cards and are attached to them,
and each commit that changed it is a dated edit in the card's history, so
**Restore** brings back an older version. Version Control gains **Releases**
and **Wiki** tabs, the wiki laid out as on GitHub. The job shows progress, can
be cancelled, pauses on a restart and stops at a rate limit. The token is
kept in memory only. Tests: `tests/githubOrgImport.test.cjs`,
`tests/githubWiki.test.cjs` and `tests/workflowYaml.test.cjs`, the last
checking 52 real workflow files against js-yaml.
</details>
**Rules** - what GitHub Actions workflows needed, for everyone.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/935e68dfdd">GitHub Actions workflows become Rules; Rules gain comments, cron and descriptions</a>. Thanks to xet7.</summary>
Issue events become triggers. Label, close, reopen, comment, assign and
create steps become actions, from the well-known actions or from `gh issue`
commands, and `actions/stale` becomes an aging rule. A build, test or script
is never run: such a workflow is a disabled rule with its YAML as its
description. For this, WeKan's Rules gain several parts, available to every
board:
- a **commented on** trigger;
- an **add comment** action, written as the person whose change ran the rule
and only where they may comment;
- **cron schedules** in UTC (`models/lib/cronSchedule.js`);
- a rule **description**, shown on the rule.
Tests: `tests/githubActionsRules.test.cjs`, `tests/cronSchedule.test.cjs` and
`tests/ruleCommentCron.test.cjs`.
</details>
**Optional APIs** - other trackers' clients, with WeKan as their backend.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/86ec72fade">Trello, Jira, GitHub and Gitea compatible APIs, off until an admin ticks them</a>. Thanks to xet7.</summary>
Admin Panel → Settings → Visibility → **Optional APIs** turns on REST APIs
in Trello's, Jira's, GitHub's and Gitea's shape (#4930), each described with
the address a client uses. None has rights of its own: each translates a
request into the matching request to WeKan's own REST API, made with the
caller's WeKan token, so every WeKan permission applies unchanged. An API that
is not ticked answers 404, and `WITH_API` turns them all off. Trello covers
members, boards, lists, cards, labels, comments and checklists. In Jira a
board is a project (the board key), a card is an issue (`DEV-7`), lists are
statuses, and simple JQL works. In GitHub and Gitea a board is a repository and
a card an issue, open or closed as in Version Control. Deleting archives. See
[Optional APIs](docs/API/Optional-APIs.md). `tests/optionalApis.test.cjs`
fails if any of them writes past WeKan's REST API.
`server/lib/tests/compatApi.tests.js` runs them over real HTTP.
</details>
**Cards** - opening a card on a phone.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/326d9bbf61">A QR code of the card's link in the card menu</a>. Thanks to xet7.</summary>
Card menu → **QR code** shows the card's link as a QR code, to open the card
on a phone or tablet. It is drawn in the browser by WeKan's own encoder
(`models/lib/qrCode.js`: byte mode, level M, versions 1–10), so the link is
sent to no QR service. `tests/qrCode.test.cjs` checks the encoder module for
module against qrcode-svg, which Meteor's accounts-2fa ships, and checks that
no outside QR service is used anywhere.
</details>
**Platforms** - where WeKan runs.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/b8d9cb2565">Android bundles for Termux, for all four Android CPUs</a>. Thanks to xet7.</summary>
Every release that has wekan/node-patches' Android Node.js also has
`wekan-<version>-android-arm64.zip`, `-x64`, `-armv7` and `-x86`, with
FerretDB. Each is the release's Linux bundle rebuilt inside Termux's own
image with that Node.js, checked against its SHA256: every native addon is
built for it, and sharp against Termux's libvips. Before it is published,
each addon's architecture is checked, sharp must load, and the bundle must
start and answer HTTP 200. A CPU whose Android Node.js is not published yet
is skipped and builds by itself once it is. `tests/androidBundles.test.cjs`
covers the build and the workflow. See [Android](docs/Platforms/FOSS/OS/Android.md).
</details>
and fixes the following bugs:
**Board keys** - how old boards get theirs.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/d0378f33c2">Old boards get their keys in one pass, in seconds rather than hours</a>. Thanks to Raymond-Voogt and xet7.</summary>
v12.41 gave each board without a key one at startup by re-reading every key
of the instance per board. It also counted up from 2 again for every board
sharing a title. That is quadratic: on 32,500 boards it ran for hours of slow
queries. Now the keys in use are read once, the new ones are planned in
memory, linearly, and written in batches, each only where the board still has
no key. A single new board reads only the keys that could collide with it,
through a new index. Tests: `tests/boardKeyBackfill.test.cjs` (32,500 boards
planned well under a second) and `server/lib/tests/boardKeys.tests.js`.
</details>
**Rules** - when a rule runs.
<details>
<summary><a href="https://github.com/wekan/wekan/commit/935e68dfdd">A disabled rule no longer runs on a schedule or from its button</a>. Thanks to xet7.</summary>
Turning a rule off (#2322) stopped it only for card events: the scheduler and
the rule's button ran it anyway, because neither looked at `enabled`. Both
check it now. Imported GitHub Actions workflows rely on this, since a
workflow that is code is imported disabled. Pinned by
`tests/ruleCommentCron.test.cjs`.
</details>
Thanks to above GitHub users for their contributions and translators for their translations.
+29 -31
View File
@@ -5,48 +5,46 @@ each one changed and the project status are in
Written by `node releases/changelog-short.mjs` from CHANGELOG-big.md:
make changes there.
# v13.11 2026-11-13 WeKan ® release
# v13.06 2026-11-11 WeKan ® release
The **file-integrity scan** stops reporting attachments and
avatars that WeKan deleted itself as missing, which had buried real
**StorageBleed** findings under thousands of false ones. The recurring-checklist
reset no longer scans every **checklist** on each tick. In the **REST API**, a
refused custom-field update changes nothing, ownership transfer takes only the
boards the user administers, and deleting a missing integration answers 404.
**CodeQL** alert #601 in a test is fixed, with two more tests
that had the same fault. A card's **overtime** set through the REST API is
saved where WeKan reads it, and cards that lost it before are repaired at
startup. Card **members and assignees** whose account was deleted can be removed
and added without an error, and clearing a card **date** no longer passes as a
date set to the rules, the due date count and the activity feed.
[All changes in v13.11](CHANGELOG-big.md#v1311-2026-11-13-wekan--release)
[All changes in v13.06](CHANGELOG-big.md#v1306-2026-11-11-wekan--release)
# v13.10 2026-11-13 WeKan ® release
# v13.05 2026-11-10 WeKan ® release
The release's **Snap Store** credential check bounds each
snapcraft install attempt, so a Snap Store that hangs no longer stops a release.
WeKan is updated to **Meteor 3.6**. The **Android** bundles
build again, after v13.04's npm retry broke their install, and the **Super
Productivity** export no longer fails for a board with a card whose list is
archived.
[All changes in v13.10](CHANGELOG-big.md#v1310-2026-11-13-wekan--release)
[All changes in v13.05](CHANGELOG-big.md#v1305-2026-11-10-wekan--release)
# v13.09 2026-11-12 WeKan ® release
# v13.04 2026-11-09 WeKan ® release
The release's **Snap Store** credential check retries installing
snapcraft, so one Snap Store timeout no longer stops a release.
**ListLockBleed** is fixed: when a list refuses a role write
access, that refusal now also holds for the checklist and checklist-item REST
routes. The **Sandstorm** and **Android** bundles retry their npm install when
github.com is briefly unavailable.
[All changes in v13.09](CHANGELOG-big.md#v1309-2026-11-12-wekan--release)
[All changes in v13.04](CHANGELOG-big.md#v1304-2026-11-09-wekan--release)
# v13.08 2026-11-12 WeKan ® release
# v13.03 2026-11-09 WeKan ® release
The **REST API** creates a card under the **parent** it is given,
and a refused **integration URL** no longer leaves the other fields of the same
update written. The **single-file** WeKan for **32-bit ARM** builds again, with
an i386 Node.js of the exact version its bundle embeds. A **GitHub CodeQL**
alert in the security alert download script is fixed.
The amd64 **snaps** no longer fail the release when the Ubuntu
archive is briefly unreachable: the build waits for it and retries once.
[All changes in v13.08](CHANGELOG-big.md#v1308-2026-11-12-wekan--release)
[All changes in v13.03](CHANGELOG-big.md#v1303-2026-11-09-wekan--release)
# v13.07 2026-11-12 WeKan ® release
# v13.02 2026-11-09 WeKan ® release
**ListLockAttachBleed** is fixed: when a list refuses a role
write access, that refusal now also holds for the attachment API's upload,
delete, copy and move. **CodeQL** alerts #602 and #603 in the tests are fixed,
**fast-xml-parser** is updated to 5.12.0, spent time reads as a **duration**,
the **indexes** that LDAP, card member and History queries need are added, and
Admin Panel → Problems can **Clear** resolved problems, which also age out.
**UnassignedArchiveBleed** is fixed: a member with the
**Normal, assigned only** role archives and converts only the cards assigned
to them, through every card method.
[All changes in v13.07](CHANGELOG-big.md#v1307-2026-11-12-wekan--release)
[All changes in v13.02](CHANGELOG-big.md#v1302-2026-11-09-wekan--release)
+2 -3
View File
@@ -38,7 +38,7 @@ FROM --platform=$BUILDPLATFORM debian:trixie AS bundle
ARG TARGETARCH
ARG TARGETVARIANT
ARG VERSION=13.11
ARG VERSION=13.06
ARG DEBIAN_FRONTEND=noninteractive
COPY --chmod=755 releases/check-telemetry.py /tmp/check-telemetry.py
@@ -148,7 +148,7 @@ ARG DEBIAN_FRONTEND=noninteractive
ENV \
DEBUG=false \
DDP_TRANSPORT=sockjs \
NODE_VERSION=v26.13.1 \
NODE_VERSION=v26.13.0 \
METEOR_RELEASE=METEOR@3.6 \
USE_EDGE=false \
NPM_VERSION=12.2.2 \
@@ -318,7 +318,6 @@ ENV \
WEKAN_DISK_WATCH_PATHS="" \
WEKAN_RAM_MONITOR="" \
WEKAN_IMPORT_RUN_STALE_MS="" \
EVENTLOG_RETENTION_DAYS="" \
CORS="" \
CORS_ALLOW_HEADERS="" \
CORS_EXPOSE_HEADERS="" \
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v13.11.0"
appVersion: "v13.06.0"
files:
userUploads:
- README.md
-3
View File
@@ -1,3 +0,0 @@
#!/bin/bash
export PACKAGE_DIRS="$(pwd)/packages"
+3 -5
View File
@@ -2,8 +2,6 @@ import { TAPi18n } from '/imports/i18n';
import Cards from '/models/cards';
import { getCurrentCardIdFromContext } from '/client/lib/currentCard';
import { backIfOwnPopup } from '/client/lib/popupBack';
// #6890: the badge shows a duration, the tooltip hours to two decimals.
import { formatSpentTime, roundedSpentHours } from '/models/lib/spentTimeFormat';
function getCardId() {
return getCurrentCardIdFromContext();
@@ -65,17 +63,17 @@ Template.cardSpentTime.helpers({
if (card.getIsOvertime && card.getIsOvertime()) {
return `${TAPi18n.__(
'overtime',
)} ${roundedSpentHours(card.getSpentTime())} ${TAPi18n.__('hours')}`;
)} ${card.getSpentTime()} ${TAPi18n.__('hours')}`;
} else if (card.getSpentTime) {
return `${TAPi18n.__(
'card-spent',
)} ${roundedSpentHours(card.getSpentTime())} ${TAPi18n.__('hours')}`;
)} ${card.getSpentTime()} ${TAPi18n.__('hours')}`;
}
return '';
},
showTime() {
const card = Cards.findOne(this._id) || this;
return card.getSpentTime ? formatSpentTime(card.getSpentTime()) : '';
return card.getSpentTime ? card.getSpentTime() : '';
},
getIsOvertime() {
const card = Cards.findOne(this._id) || this;
@@ -0,0 +1,3 @@
.minicard-title .minicard-complete-toggle {
display: none;
}
@@ -100,6 +100,5 @@ template(name="problemsSummary")
span.admin-problem-count {{area.count}} {{_ 'new-problems'}}
.admin-problem-actions
button.js-ack-checked.primary {{_ 'acknowledge'}}
button.js-clear-checked {{_ 'clear-problems'}}
else
p {{_ 'no-new-problems'}}
@@ -232,14 +232,4 @@ Template.problemsSummary.events({
if (!streams.length) return;
Meteor.call('acknowledgeEventLog', streams, () => templateInstance.reload());
},
// Clear (#6893) removes the checked streams' events up to now, so a resolved
// problem stops showing, where Acknowledge only resets the count.
'click .js-clear-checked'(event, templateInstance) {
const streams = Array.from(templateInstance.findAll('.js-problem-check:checked'))
.map(el => el.getAttribute('data-stream'))
.filter(Boolean);
if (!streams.length) return;
Meteor.call('clearEventLog', streams, () => templateInstance.reload());
},
});
+1
View File
@@ -54,4 +54,5 @@ import '/client/components/cards/subtasks.css';
import '/client/components/cards/similarCards.css';
import '/client/components/cards/fromText.css';
import '/client/components/cards/whiteboard.css';
import '/client/components/cards/minicardOverrides.css';
-4
View File
@@ -986,10 +986,6 @@ services:
# progress counts as interrupted and can be resumed or discarded (at least
# 60000).
#- WEKAN_IMPORT_RUN_STALE_MS=600000
# EVENTLOG_RETENTION_DAYS : Days after which an Admin Panel / Problems event
# is deleted by the daily sweep, so resolved problems age out; a recurring
# problem keeps a recent date and stays. Default 90, 0 = keep forever.
#- EVENTLOG_RETENTION_DAYS=90
#---------------------------------------------------------------
# ATTACHMENT RETENTION (models/lib/attachmentRetention.js). Off unless set.
# ATTACHMENTS_RETENTION_DAYS : once a night, delete card attachments older
-4
View File
@@ -988,10 +988,6 @@ services:
# progress counts as interrupted and can be resumed or discarded (at least
# 60000).
#- WEKAN_IMPORT_RUN_STALE_MS=600000
# EVENTLOG_RETENTION_DAYS : Days after which an Admin Panel / Problems event
# is deleted by the daily sweep, so resolved problems age out; a recurring
# problem keeps a recent date and stays. Default 90, 0 = keep forever.
#- EVENTLOG_RETENTION_DAYS=90
#---------------------------------------------------------------
# ATTACHMENT RETENTION (models/lib/attachmentRetention.js). Off unless set.
# ATTACHMENTS_RETENTION_DAYS : once a night, delete card attachments older
@@ -975,10 +975,6 @@ services:
# progress counts as interrupted and can be resumed or discarded (at least
# 60000).
#- WEKAN_IMPORT_RUN_STALE_MS=600000
# EVENTLOG_RETENTION_DAYS : Days after which an Admin Panel / Problems event
# is deleted by the daily sweep, so resolved problems age out; a recurring
# problem keeps a recent date and stays. Default 90, 0 = keep forever.
#- EVENTLOG_RETENTION_DAYS=90
#---------------------------------------------------------------
# ATTACHMENT RETENTION (models/lib/attachmentRetention.js). Off unless set.
# ATTACHMENTS_RETENTION_DAYS : once a night, delete card attachments older
-4
View File
@@ -992,10 +992,6 @@ services:
# progress counts as interrupted and can be resumed or discarded (at least
# 60000).
#- WEKAN_IMPORT_RUN_STALE_MS=600000
# EVENTLOG_RETENTION_DAYS : Days after which an Admin Panel / Problems event
# is deleted by the daily sweep, so resolved problems age out; a recurring
# problem keeps a recent date and stays. Default 90, 0 = keep forever.
#- EVENTLOG_RETENTION_DAYS=90
#---------------------------------------------------------------
# ATTACHMENT RETENTION (models/lib/attachmentRetention.js). Off unless set.
# ATTACHMENTS_RETENTION_DAYS : once a night, delete card attachments older
@@ -898,10 +898,6 @@ services:
# progress counts as interrupted and can be resumed or discarded (at least
# 60000).
#- WEKAN_IMPORT_RUN_STALE_MS=600000
# EVENTLOG_RETENTION_DAYS : Days after which an Admin Panel / Problems event
# is deleted by the daily sweep, so resolved problems age out; a recurring
# problem keeps a recent date and stays. Default 90, 0 = keep forever.
#- EVENTLOG_RETENTION_DAYS=90
#---------------------------------------------------------------
# ATTACHMENT RETENTION (models/lib/attachmentRetention.js). Off unless set.
# ATTACHMENTS_RETENTION_DAYS : once a night, delete card attachments older
-4
View File
@@ -1129,10 +1129,6 @@ services:
# progress counts as interrupted and can be resumed or discarded (at least
# 60000).
#- WEKAN_IMPORT_RUN_STALE_MS=600000
# EVENTLOG_RETENTION_DAYS : Days after which an Admin Panel / Problems event
# is deleted by the daily sweep, so resolved problems age out; a recurring
# problem keeps a recent date and stays. Default 90, 0 = keep forever.
#- EVENTLOG_RETENTION_DAYS=90
#---------------------------------------------------------------
# ATTACHMENT RETENTION (models/lib/attachmentRetention.js). Off unless set.
# ATTACHMENTS_RETENTION_DAYS : once a night, delete card attachments older
-4
View File
@@ -973,10 +973,6 @@ services:
# progress counts as interrupted and can be resumed or discarded (at least
# 60000).
#- WEKAN_IMPORT_RUN_STALE_MS=600000
# EVENTLOG_RETENTION_DAYS : Days after which an Admin Panel / Problems event
# is deleted by the daily sweep, so resolved problems age out; a recurring
# problem keeps a recent date and stays. Default 90, 0 = keep forever.
#- EVENTLOG_RETENTION_DAYS=90
#---------------------------------------------------------------
# ATTACHMENT RETENTION (models/lib/attachmentRetention.js). Off unless set.
# ATTACHMENTS_RETENTION_DAYS : once a night, delete card attachments older
@@ -1,14 +0,0 @@
# WeKan settings. Every setting is listed, with comments, in
# https://github.com/wekan/wekan/blob/main/docker-compose.yml
# Restart after editing: systemctl restart wekan
# The address users open WeKan at. WeKan builds its links from it and its
# live updates connect to it, so it must match the address in the browser.
ROOT_URL=http://localhost:8080
PORT=8080
# Database, attachments and avatars: /var/lib/wekan/files/{db,attachments,avatars}
WRITABLE_PATH=/var/lib/wekan
#MAIL_URL=smtp://user:password@mailserver.example.com:25/
#MAIL_FROM=WeKan <wekan@example.com>
@@ -10,7 +10,7 @@ This is without container (without Docker or Snap).
Right click and download files 1-4:
1. [wekan-13.11-win64.zip](https://github.com/wekan/wekan/releases/download/v13.11/wekan-13.11-win64.zip) or newest available at https://github.com/wekan/wekan/releases/
1. [wekan-13.06-win64.zip](https://github.com/wekan/wekan/releases/download/v13.06/wekan-13.06-win64.zip) or newest available at https://github.com/wekan/wekan/releases/
2. [node.exe](https://nodejs.org/dist/latest-v26.x/win-x64/node.exe)
@@ -22,7 +22,7 @@ Right click and download files 1-4:
6. Double click `mongodb-windows-x86_64-7.0.34-signed.msi` . In installer, uncheck downloading MongoDB compass.
7. Unzip `wekan-13.11-win64.zip` , inside it is directory `bundle`, to it copy other files:
7. Unzip `wekan-13.06-win64.zip` , inside it is directory `bundle`, to it copy other files:
```
bundle (directory)
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Peukara pangkalan data",
"new-problems": "peukara barô",
"acknowledge": "Teurimong",
"clear-problems": "Peugléh",
"rulesReportTitle": "Laporan Atôran",
"boardsReportTitle": "Laporan Papan",
"cardsReportTitle": "Laporan Kad",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Databasisprobleme",
"new-problems": "nuwe probleme",
"acknowledge": "Erken",
"clear-problems": "Maak skoon",
"rulesReportTitle": "Reëlsverslag",
"boardsReportTitle": "Raadsverslag",
"cardsReportTitle": "Kaarte Verslag",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Databasisprobleme",
"new-problems": "nuwe probleme",
"acknowledge": "Erken",
"clear-problems": "Maak skoon",
"rulesReportTitle": "Reëlsverslag",
"boardsReportTitle": "Raadsverslag",
"cardsReportTitle": "Kaarte Verslag",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Nsɛm akorabea mu haw",
"new-problems": "Fa ade foforo ka ho",
"acknowledge": "Gye tom",
"clear-problems": "Pepa",
"rulesReportTitle": "Mmara ho amanneɛbɔ",
"boardsReportTitle": "Bɔɔd ho amanneɛbɔ",
"cardsReportTitle": "Kaad ho amanneɛbɔ",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "የውሂብ ጎታ ችግሮች",
"new-problems": "አዲስ ችግሮች",
"acknowledge": "እውቅና ስጥ",
"clear-problems": "አጽዳ",
"rulesReportTitle": "የደንቦች ሪፖርት",
"boardsReportTitle": "የሰሌዳዎች ሪፖርት",
"cardsReportTitle": "የካርዶች ሪፖርት",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemas d’a base de datos",
"new-problems": "problemas nuevos",
"acknowledge": "Confirmar",
"clear-problems": "Limpiar",
"rulesReportTitle": "Informe sobre as Reglas",
"boardsReportTitle": "Informe sobre os Tableros",
"cardsReportTitle": "Informe sobre as Tarchetas",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "مشاكل قاعدة البيانات",
"new-problems": "مشاكل جديدة",
"acknowledge": "إقرار",
"clear-problems": "مسح",
"rulesReportTitle": "تقرير القواعد",
"boardsReportTitle": "تقرير اللوحات",
"cardsReportTitle": "تقرير البطاقات",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "مشاكل قاعدة البيانات",
"new-problems": "مشاكل جديدة",
"acknowledge": "إقرار",
"clear-problems": "مسح",
"rulesReportTitle": "تقرير القواعد",
"boardsReportTitle": "تقرير اللوحات",
"cardsReportTitle": "تقرير البطاقات",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "مشاكل قاعدة البيانات",
"new-problems": "مشاكل جديدة",
"acknowledge": "إقرار",
"clear-problems": "مسح",
"rulesReportTitle": "تقرير القواعد",
"boardsReportTitle": "تقرير اللوحات",
"cardsReportTitle": "تقرير البطاقات",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "مشاكل قاعدة البيانات",
"new-problems": "مشاكل جداد",
"acknowledge": "تأكيد",
"clear-problems": "مسح",
"rulesReportTitle": "تقرير القواعد",
"boardsReportTitle": "تقرير اللوحات",
"cardsReportTitle": "تقرير البطاقات",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "ডাটাবেছৰ সমস্যাসমূহ",
"new-problems": "নতুন সমস্যাসমূহ",
"acknowledge": "স্বীকাৰ কৰক",
"clear-problems": "পৰিষ্কাৰ কৰক",
"rulesReportTitle": "নিয়মৰ প্ৰতিবেদন",
"boardsReportTitle": "বৰ্ডৰ প্ৰতিবেদন",
"cardsReportTitle": "কাৰ্ডৰ প্ৰতিবেদন",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemes de la base de datos",
"new-problems": "problemes nuevos",
"acknowledge": "Reconocer",
"clear-problems": "Llimpiar",
"rulesReportTitle": "Informe sobre las Reglas",
"boardsReportTitle": "Informe de los tableros",
"cardsReportTitle": "Informe de les tarxetes",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Aymar aruna: Database problems",
"new-problems": "machaqa problems",
"acknowledge": "Aymar aruna: Acknowledge",
"clear-problems": "Q'umachaña",
"rulesReportTitle": "Rules yatiyawi",
"boardsReportTitle": "pirqanaka yatiyawi",
"cardsReportTitle": "tarjetanaka yatiyawi",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Verilənlər bazası problemləri",
"new-problems": "yeni problem",
"acknowledge": "Təsdiqlə",
"clear-problems": "Təmizlə",
"rulesReportTitle": "Qaydalar Hesabatı",
"boardsReportTitle": "İdarə Heyətinin Hesabatı",
"cardsReportTitle": "Kartlar Hesabatı",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Verilənlər bazası problemləri",
"new-problems": "yeni problem",
"acknowledge": "Təsdiqlə",
"clear-problems": "Təmizlə",
"rulesReportTitle": "Qaydalar Hesabatı",
"boardsReportTitle": "İdarə Heyətinin Hesabatı",
"cardsReportTitle": "Kartlar Hesabatı",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Verilənlər bazası problemləri",
"new-problems": "yeni problem",
"acknowledge": "Təsdiqlə",
"clear-problems": "Təmizlə",
"rulesReportTitle": "Qaydalar Hesabatı",
"boardsReportTitle": "İdarə Heyətinin Hesabatı",
"cardsReportTitle": "Kartlar Hesabatı",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Мәғлүмәттәр базаһы мәсьәләләре",
"new-problems": "яңы мәсьәләләр",
"acknowledge": "Таныу",
"clear-problems": "Таҙартырға",
"rulesReportTitle": "Ҡағиҙәләр хисабы",
"boardsReportTitle": "Таҡталар хисабы",
"cardsReportTitle": "Карточкалар хисабы",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Праблемы базы даных",
"new-problems": "новых праблем",
"acknowledge": "Пацвердзіць",
"clear-problems": "Ачысціць",
"rulesReportTitle": "Справаздача па правілах",
"boardsReportTitle": "Справаздача па дошках",
"cardsReportTitle": "Справаздача па картках",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Проблеми с базата данни",
"new-problems": "нови проблема",
"acknowledge": "Потвърждаване",
"clear-problems": "Изчистване",
"rulesReportTitle": "Отчет за правилата",
"boardsReportTitle": "Отчет за таблата",
"cardsReportTitle": "Отчет за картите",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "डेटाबेस समस्या",
"new-problems": "नया समस्या",
"acknowledge": "जानकारी स्वीकार करीं",
"clear-problems": "साफ करीं",
"rulesReportTitle": "नियम रपट",
"boardsReportTitle": "बोर्ड रपट",
"cardsReportTitle": "कार्ड रपट",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Ol problem blong databes",
"new-problems": "niu problem",
"acknowledge": "Talem se yu kasem",
"clear-problems": "Klinim",
"rulesReportTitle": "Ripot blong ol rul",
"boardsReportTitle": "Ripot blong Ol bod",
"cardsReportTitle": "Ripot blong Ol kad",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Datakurun gɛlɛyaw",
"new-problems": "gɛlɛya kuraw",
"acknowledge": "A sɔrɔ",
"clear-problems": "Saniya",
"rulesReportTitle": "Sariyaw lapɔrɔ",
"boardsReportTitle": "Tabaliw lapɔrɔ",
"cardsReportTitle": "Karataw lapɔrɔ",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "ডেটাবেসের সমস্যা",
"new-problems": "নতুন সমস্যা",
"acknowledge": "স্বীকার করুন",
"clear-problems": "মুছুন",
"rulesReportTitle": "নিয়মের প্রতিবেদন",
"boardsReportTitle": "বোর্ডের প্রতিবেদন",
"cardsReportTitle": "কার্ডের প্রতিবেদন",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "གཞི་གྲངས་མཛོད་ཀྱི་གནད་དོན།",
"new-problems": "གནད་དོན་གསར་པ།",
"acknowledge": "ངོས་ལེན།",
"clear-problems": "གཙང་སེལ།",
"rulesReportTitle": "སྒྲིག་སྲོལ་སྙན་ཞུ།",
"boardsReportTitle": "ལས་སྟེགས་སྙན་ཞུ།",
"cardsReportTitle": "བྱང་བུའི་སྙན་ཞུ།",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Kudennoù an diaz roadennoù",
"new-problems": "kudenn nevez",
"acknowledge": "Anzav",
"clear-problems": "Skarzhañ",
"rulesReportTitle": "Raport a benn ar merde",
"boardsReportTitle": "Raport a benn taolennnoù",
"cardsReportTitle": "Raport a benn kartennnoù",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemi baze podataka",
"new-problems": "novih problema",
"acknowledge": "Potvrdi",
"clear-problems": "Očisti",
"rulesReportTitle": "Izvještaj o pravilima",
"boardsReportTitle": "Izvještaj o tablama",
"cardsReportTitle": "Izvještaj o karticama",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Үгэгдэлэй сангай асуудалнууд",
"new-problems": "шэнэ асуудалнууд",
"acknowledge": "Мэдэрхэ",
"clear-problems": "Арилгаха",
"rulesReportTitle": "Дүримүүдэй тайлан",
"boardsReportTitle": "Самбарнуудай тайлан",
"cardsReportTitle": "Картануудай тайлан",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemes de la base de dades",
"new-problems": "problemes nous",
"acknowledge": "Reconeix",
"clear-problems": "Neteja",
"rulesReportTitle": "Informe de normes",
"boardsReportTitle": "Informe de les Juntes",
"cardsReportTitle": "Informe de fitxes",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemes de la base de dades",
"new-problems": "problemes nous",
"acknowledge": "Reconeix",
"clear-problems": "Neteja",
"rulesReportTitle": "Informe de normes",
"boardsReportTitle": "Informe de les Juntes",
"cardsReportTitle": "Informe de fitxes",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemes de la base de dades",
"new-problems": "problemes nous",
"acknowledge": "Reconeix",
"clear-problems": "Neteja",
"rulesReportTitle": "Informe de normes",
"boardsReportTitle": "Informe de les Juntes",
"cardsReportTitle": "Informe de fitxes",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "ᎧᏃᎮᏓ ᏗᎦᏓᎭ",
"new-problems": "ᎢᏤ ᏗᎦᏓᎭ",
"acknowledge": "ᎠᏓᏂᎸᏤᏗ",
"clear-problems": "ᎯᏅᎦᎸ",
"rulesReportTitle": "ᏗᎧᎿᏩᏛᏍᏗ ᎧᏃᎮᏓ",
"boardsReportTitle": "ᏗᎦᏍᎩᎸ ᎧᏃᎮᏓ",
"cardsReportTitle": "ᏗᎪᏪᎵ ᏗᏍᏗ ᎧᏃᎮᏓ",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "کێشەکانی بنکەدراوە",
"new-problems": "کێشە نوێکان",
"acknowledge": "پەسەند بکە",
"clear-problems": "پاککردنەوە",
"rulesReportTitle": "ڕاپۆرتی یاساکان",
"boardsReportTitle": "ڕاپۆرتی تەختەکان",
"cardsReportTitle": "ڕاپۆرتی کارتەکان",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "数据库问题",
"new-problems": "个新问题",
"acknowledge": "确认",
"clear-problems": "清除",
"rulesReportTitle": "规则报告",
"boardsReportTitle": "看板报告",
"cardsReportTitle": "卡片报告",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Prublemi di a basa di dati",
"new-problems": "prublemi novi",
"acknowledge": "Cunfirmà",
"clear-problems": "Sguassà",
"rulesReportTitle": "Raportu di e regule",
"boardsReportTitle": "Raportu di e tavule",
"cardsReportTitle": "Raportu di e carte",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problémy databáze",
"new-problems": "nových problémů",
"acknowledge": "Potvrdit",
"clear-problems": "Vymazat",
"rulesReportTitle": "Report pravidel",
"boardsReportTitle": "Report tabel",
"cardsReportTitle": "Report karet",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problémy databáze",
"new-problems": "nových problémů",
"acknowledge": "Potvrdit",
"clear-problems": "Vymazat",
"rulesReportTitle": "Report pravidel",
"boardsReportTitle": "Report tabel",
"cardsReportTitle": "Report karet",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemë bazë dónëch",
"new-problems": "nowych problemòw",
"acknowledge": "Pòcwierdzë",
"clear-problems": "Wëczëszczë",
"rulesReportTitle": "Rapòrt reglów",
"boardsReportTitle": "Raport tôblëcòw",
"cardsReportTitle": "Raport kôrtòw",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Палӑрту базин проблемӗсем",
"new-problems": "ҫӗнӗ проблемӑсем",
"acknowledge": "Йышӑнас",
"clear-problems": "Тасатас",
"rulesReportTitle": "Правилӑсен отчӗчӗ",
"boardsReportTitle": "Хӑмасен отчӗчӗ",
"cardsReportTitle": "Карточкӑсен отчӗчӗ",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemau cronfa ddata",
"new-problems": "problemau newydd",
"acknowledge": "Cydnabod",
"clear-problems": "Clirio",
"rulesReportTitle": "Adroddiad Rheolau",
"boardsReportTitle": "Adroddiad y Byrddau",
"cardsReportTitle": "Adroddiad Cardiau",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemau cronfa ddata",
"new-problems": "problemau newydd",
"acknowledge": "Cydnabod",
"clear-problems": "Clirio",
"rulesReportTitle": "Adroddiad Rheolau",
"boardsReportTitle": "Adroddiad y Byrddau",
"cardsReportTitle": "Adroddiad Cardiau",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Databaseproblemer",
"new-problems": "nye problemer",
"acknowledge": "Bekræft",
"clear-problems": "Nulstil",
"rulesReportTitle": "Regelrapport",
"boardsReportTitle": "Tavlerapport",
"cardsReportTitle": "Kortrapport",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Datenbankprobleme",
"new-problems": "neue Probleme",
"acknowledge": "Bestätigen",
"clear-problems": "Zurücksetzen",
"rulesReportTitle": "Regeln-Bericht",
"boardsReportTitle": "Board-Bericht",
"cardsReportTitle": "Karten-Bericht",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Datenbankprobleme",
"new-problems": "neue Probleme",
"acknowledge": "Bestätigen",
"clear-problems": "Zurücksetzen",
"rulesReportTitle": "Regeln-Bericht",
"boardsReportTitle": "Board-Bericht",
"cardsReportTitle": "Karten-Bericht",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Datenbankprobleme",
"new-problems": "neue Probleme",
"acknowledge": "Bestätigen",
"clear-problems": "Zurücksetzen",
"rulesReportTitle": "Regeln-Bericht",
"boardsReportTitle": "Boardbericht",
"cardsReportTitle": "Kartenbericht",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Datenbankprobleme",
"new-problems": "neue Probleme",
"acknowledge": "Bestätigen",
"clear-problems": "Zurücksetzen",
"rulesReportTitle": "Regeln-Bericht",
"boardsReportTitle": "Boardbericht",
"cardsReportTitle": "Kartenbericht",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "གཞི་གྲངས་མཛོད་གནད་དོན།",
"new-problems": "གནད་དོན་གསར་པ།",
"acknowledge": "ངོས་ལེན།",
"clear-problems": "བསལ།",
"rulesReportTitle": "སྒྲིག་ལམ་སྙན་ཞུ།",
"boardsReportTitle": "བྱང་གཞིའི་སྙན་ཞུ།",
"cardsReportTitle": "ཤོག་བྱང་སྙན་ཞུ།",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Nyatakakadzraɖoƒe ƒe kuxiwo",
"new-problems": "kuxi yeyewo",
"acknowledge": "Lɔ̃ ɖe edzi",
"clear-problems": "Tutui ɖa",
"rulesReportTitle": "Sewo ƒe nyatakakagbalẽ",
"boardsReportTitle": "Kpekpeɖeŋuwo ƒe nyatakakagbalẽ",
"cardsReportTitle": "Kaɖiwo ƒe nyatakakagbalẽ",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Προβλήματα βάσης δεδομένων",
"new-problems": "νέα προβλήματα",
"acknowledge": "Επιβεβαίωση",
"clear-problems": "Εκκαθάριση",
"rulesReportTitle": "Αναφορά κανόνων",
"boardsReportTitle": "Αναφορά πινάκων",
"cardsReportTitle": "Αναφορά καρτών",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Προβλήματα βάσης δεδομένων",
"new-problems": "νέα προβλήματα",
"acknowledge": "Επιβεβαίωση",
"clear-problems": "Εκκαθάριση",
"rulesReportTitle": "Αναφορά κανόνων",
"boardsReportTitle": "Αναφορά πινάκων",
"cardsReportTitle": "Αναφορά καρτών",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Database problems",
"new-problems": "new problems",
"acknowledge": "Acknowledge",
"clear-problems": "Clear",
"rulesReportTitle": "Rules Report",
"boardsReportTitle": "Boards Report",
"cardsReportTitle": "Cards Report",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Database problems",
"new-problems": "new problems",
"acknowledge": "Acknowledge",
"clear-problems": "Clear",
"rulesReportTitle": "Rules Report",
"boardsReportTitle": "Boards Report",
"cardsReportTitle": "Cards Report",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Database problems",
"new-problems": "new problems",
"acknowledge": "Acknowledge",
"clear-problems": "Clear",
"rulesReportTitle": "Rules Report",
"boardsReportTitle": "Boards Report",
"cardsReportTitle": "Cards Report",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Database problems",
"new-problems": "new problems",
"acknowledge": "Acknowledge",
"clear-problems": "Clear",
"rulesReportTitle": "Rules Report",
"boardsReportTitle": "Boards Report",
"cardsReportTitle": "Cards Report",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Database problems",
"new-problems": "new problems",
"acknowledge": "Acknowledge",
"clear-problems": "Clear",
"rulesReportTitle": "Rules Report",
"boardsReportTitle": "Boards Report",
"cardsReportTitle": "Cards Report",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Database problems",
"new-problems": "new problems",
"acknowledge": "Acknowledge",
"clear-problems": "Clear",
"rulesReportTitle": "Rules Report",
"boardsReportTitle": "Boards Report",
"cardsReportTitle": "Cards Report",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Database problems",
"new-problems": "new problems",
"acknowledge": "Acknowledge",
"clear-problems": "Clear",
"rulesReportTitle": "Rules Report",
"boardsReportTitle": "Boards Report",
"cardsReportTitle": "Cards Report",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Database problems",
"new-problems": "new problems",
"acknowledge": "Acknowledge",
"clear-problems": "Clear",
"rulesReportTitle": "Rules Report",
"boardsReportTitle": "Boards Report",
"cardsReportTitle": "Cards Report",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Database problems",
"new-problems": "new problems",
"acknowledge": "Acknowledge",
"clear-problems": "Clear",
"rulesReportTitle": "Rules Report",
"boardsReportTitle": "Boards Report",
"cardsReportTitle": "Cards Report",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Database problems",
"new-problems": "new problems",
"acknowledge": "Acknowledge",
"clear-problems": "Clear",
"rulesReportTitle": "Rules Report",
"boardsReportTitle": "Boards Report",
"cardsReportTitle": "Cards Report",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Database problems",
"new-problems": "new problems",
"acknowledge": "Acknowledge",
"clear-problems": "Clear",
"rulesReportTitle": "Rules Report",
"boardsReportTitle": "Boards Report",
"cardsReportTitle": "Cards Report",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Database problems",
"new-problems": "new problems",
"acknowledge": "Acknowledge",
"clear-problems": "Clear",
"rulesReportTitle": "Rules Report",
"boardsReportTitle": "Boards Report",
"cardsReportTitle": "Cards Report",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Datumbazaj problemoj",
"new-problems": "novaj problemoj",
"acknowledge": "Konfirmi",
"clear-problems": "Viŝi",
"rulesReportTitle": "Raporto pri reguloj",
"boardsReportTitle": "Raporto pri tabuloj",
"cardsReportTitle": "Raporto pri kartoj",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemas de la base de datos",
"new-problems": "problemas nuevos",
"acknowledge": "Confirmar",
"clear-problems": "Borrar",
"rulesReportTitle": "Informe sobre las Reglas",
"boardsReportTitle": "Informe sobre los Tableros",
"cardsReportTitle": "Informe sobre las Tarjetas",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemas de la base de datos",
"new-problems": "problemas nuevos",
"acknowledge": "Confirmar",
"clear-problems": "Borrar",
"rulesReportTitle": "Informe sobre las Reglas",
"boardsReportTitle": "Informe sobre los Tableros",
"cardsReportTitle": "Informe sobre las Tarjetas",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemas de la base de datos",
"new-problems": "problemas nuevos",
"acknowledge": "Confirmar",
"clear-problems": "Borrar",
"rulesReportTitle": "Informe sobre las Reglas",
"boardsReportTitle": "Informe sobre los Tableros",
"cardsReportTitle": "Informe sobre las Tarjetas",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemas de la base de datos",
"new-problems": "problemas nuevos",
"acknowledge": "Confirmar",
"clear-problems": "Borrar",
"rulesReportTitle": "Informe sobre las Reglas",
"boardsReportTitle": "Informe sobre los Tableros",
"cardsReportTitle": "Informe sobre las Tarjetas",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemas de la base de datos",
"new-problems": "problemas nuevos",
"acknowledge": "Confirmar",
"clear-problems": "Borrar",
"rulesReportTitle": "Informe sobre las Reglas",
"boardsReportTitle": "Informe sobre los Tableros",
"cardsReportTitle": "Informe sobre las Tarjetas",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemas de la base de datos",
"new-problems": "problemas nuevos",
"acknowledge": "Confirmar",
"clear-problems": "Borrar",
"rulesReportTitle": "Informe sobre las Reglas",
"boardsReportTitle": "Informe sobre los Tableros",
"cardsReportTitle": "Informe sobre las Tarjetas",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemas de la base de datos",
"new-problems": "problemas nuevos",
"acknowledge": "Confirmar",
"clear-problems": "Borrar",
"rulesReportTitle": "Informe sobre las Reglas",
"boardsReportTitle": "Informe sobre los Tableros",
"cardsReportTitle": "Informe sobre las Tarjetas",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemas de la base de datos",
"new-problems": "problemas nuevos",
"acknowledge": "Confirmar",
"clear-problems": "Borrar",
"rulesReportTitle": "Informe sobre las Reglas",
"boardsReportTitle": "Informe sobre los Tableros",
"cardsReportTitle": "Informe sobre las Tarjetas",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Problemas de la base de datos",
"new-problems": "problemas nuevos",
"acknowledge": "Confirmar",
"clear-problems": "Borrar",
"rulesReportTitle": "Informe sobre las Reglas",
"boardsReportTitle": "Informe sobre los Tableros",
"cardsReportTitle": "Informe sobre las Tarjetas",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Andmebaasi probleemid",
"new-problems": "uut probleemi",
"acknowledge": "Kinnita",
"clear-problems": "Tühjenda",
"rulesReportTitle": "Reeglite aruanne",
"boardsReportTitle": "Juhatuse aruanne",
"cardsReportTitle": "Kaartide aruanne",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Datu-basearen arazoak",
"new-problems": "arazo berri",
"acknowledge": "Berretsi",
"clear-problems": "Garbitu",
"rulesReportTitle": "Arauen txostena",
"boardsReportTitle": "Arbelen txostena",
"cardsReportTitle": "Txartelen txostena",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "مشکلات پایگاه داده",
"new-problems": "مشکل جدید",
"acknowledge": "تأیید",
"clear-problems": "پاک کردن",
"rulesReportTitle": "گزارش قوانین",
"boardsReportTitle": "گزارش بردها",
"cardsReportTitle": "گزارش کارت‌ها",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "مشکلات پایگاه داده",
"new-problems": "مشکل جدید",
"acknowledge": "تأیید",
"clear-problems": "پاک کردن",
"rulesReportTitle": "گزارش قوانین",
"boardsReportTitle": "گزارش بردها",
"cardsReportTitle": "گزارش کارت‌ها",
-1
View File
@@ -2380,7 +2380,6 @@
"databaseReportTitle": "Caɗeele ruttorde keɓe",
"new-problems": "caɗeele kese",
"acknowledge": "Jaɓ",
"clear-problems": "Laɓɓin",
"rulesReportTitle": "Jaŋtol kuule",
"boardsReportTitle": "Jaŋtol alluuje",
"cardsReportTitle": "Jaŋtol karte",
Loaded 100 of 357 files, more files were not shown because too many files have changed in this diff. Show more