Skip to content

Conversation

hotzenklotz
Copy link
Member

@hotzenklotz hotzenklotz commented Sep 17, 2025

I update the docs for several topics to refect recent changes, renaming and new features. In most cases I improved the wording, structure and (hopefully) reading flow.

Related changes in wk-libs:

Issues:

  • None

(Please delete unneeded items, merge only when none are left open)

  • Added changelog entry (create a $PR_NUMBER.md file in unreleased_changes or use ./tools/create-changelog-entry.py)
  • Added migration guide entry if applicable (edit the same file as for the changelog)
  • Updated documentation if applicable
  • Adapted wk-libs python client if relevant API parts change
  • Removed dev-only changes like prints and application.conf edits
  • Considered common edge cases
  • Needs datastore update after deployment

@hotzenklotz hotzenklotz self-assigned this Sep 17, 2025
Copy link
Contributor

coderabbitai bot commented Sep 17, 2025

📝 Walkthrough

Walkthrough

Multiple documentation pages were reorganized and rewritten: animations flow moved to a modal-centric guide; dataset settings split into tabbed sections; UI Object Info and Toolbar docs restructured; users/account docs consolidated (including deleting the passkeys page and updating the account page); minor edits to sharing, dashboard datasets, and today_i_learned pages.

Changes

Cohort / File(s) Summary of Changes
Animations Modal Guide
docs/automation/animations.md
Converted linear creation steps to a modal-based workflow; added a comprehensive "Animation Options" section (Camera Position modes, Movie Resolution with plan gating, include meshes/watermark toggles, Layer & Bounding Box selection); removed embedded video reference and updated navbar wording.
Dataset Settings Overhaul
docs/datasets/settings.md
Reorganized into tab/section layout (Data Source, General Dataset Settings, Axis Rotation, Layer Settings, Sharing & Permissions, Advanced View, View Configuration, Delete); relocated core properties and per-layer guidance; updated wording, images, and access notes.
Dashboard Illustration
docs/dashboard/datasets.md
Removed the Regular Users illustration, leaving only the Team Manager/Admin dashboard image.
Sharing Callouts
docs/sharing/dataset_sharing.md
Replaced bold guidance lines with admonition blocks (warning/info); adjusted wording (e.g., 'display name' → 'name').
Today I Learned — Video Blurb
docs/today_i_learned.md
Added subscription/playlist lines before the embedded video and removed a duplicate subscribe line after the video; iframe unchanged.
Object Info / Sidebar Tabs
docs/ui/object_info.md
Replaced brief intro/bulleted list with explicit per-tab sections (Info, Skeleton, Comments, Segments, Bounding Boxes, Abstract Tree, Connectome); added "Customizing the Layout", cross-links, and expanded action bullets.
Toolbar — Bounding Box Tool
docs/ui/toolbar.md
Replaced cross-reference with inline usage guidance for the Bounding Box Tool (create by selecting and dragging in 2D, resize via corners/edges) and added management details (BBoxes tab actions, links to sidebar docs).
Users / Account Docs
docs/users/index.md, docs/users/organizations.md, docs/users/passkeys.md, docs/users/password.md
Updated Users navigation (renamed "Password and account" → "Account and password" and removed Passkeys nav item); deleted docs/users/passkeys.md; added "Managing Your Organization" admin section and Switching Organizations details; consolidated Password/Account into an "Account Settings" hub with Profile, Security (passwords & passkeys) and Developer Settings.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

I hop through docs with whiskers bright,
Modal windows open in the night.
Bounding boxes dance and views align,
Tabs rearranged — the pages shine.
A tiny carrot cheer — documentation delight! 🥕

Pre-merge checks and finishing touches

❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Title Check ❓ Inconclusive The title "Updated Docs" is thematically correct because the changeset updates many documentation pages (datasets, UI, toolbar, sharing, users, animations, etc.), but the title is overly generic, non-descriptive, and contains extra whitespace; it does not clearly summarize the primary change or highlight the main affected areas. Please rename the PR to a concise, specific title that highlights the primary change and the main areas touched (for example: "Docs: reorganize dataset settings and UI; add animation modal docs" or "Docs: updates to datasets, UI, toolbar, sharing, and account pages") before merging.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed The PR description clearly states that multiple documentation pages were updated, summarizes the intent to improve wording and structure, and links related wk-libs commits, which aligns with the provided changeset summaries and satisfies the lenient description check.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch update-docs

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5705814 and 94d5d3b.

📒 Files selected for processing (1)
  • docs/datasets/settings.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/datasets/settings.md

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (19)
docs/today_i_learned.md (3)

5-6: Tighten CTA and fix hyphenation ("up to date"); use "and" instead of "or".

This reads clearer and avoids implying exclusivity.

Please also confirm the Bluesky handle is correct.

-Subscribe to our YouTube channel [@webknossos](https://www.youtube.com/@webknossos) or [@webknossos.org](https://bsky.app/profile/webknossos.org) on Bluesky to stay up-to-date. 
+Subscribe to our YouTube channel [@webknossos](https://www.youtube.com/@webknossos) and follow [@webknossos.org](https://bsky.app/profile/webknossos.org) on Bluesky to stay up to date.

7-8: Fix pronoun and streamline phrasing.

"your" → "our"; remove filler.

-Please enjoy this playlist of your latest tips and tricks:
+Enjoy our playlist of the latest tips and tricks:

9-11: Optional: improve a11y/perf by disabling autoplay and lazy‑loading the iframe.

Autoplay can be disruptive; lazy‑loading reduces initial page weight.

-  <iframe width="560" height="560" src="https://www.youtube-nocookie.com/embed/videoseries?si=CqXiVKkxxFU8uETH&amp;list=PLpizOgyiA4kEGKFRQFOgjucZCKtI2GUZY&autoplay=1&loop=1&mute=1" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
+  <iframe width="560" height="560" loading="lazy" src="https://www.youtube-nocookie.com/embed/videoseries?si=CqXiVKkxxFU8uETH&amp;list=PLpizOgyiA4kEGKFRQFOgjucZCKtI2GUZY&autoplay=0&loop=1&mute=1" title="YouTube video player" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
docs/users/organizations.md (3)

12-15: Clarify who can access Organization settings (Admin vs. Owner).

State explicitly whether the Organization “Owner” also has access to this page and whether Owner is a distinct role from Admin. If both can access, document precedence; if only Admins can, say so to avoid ambiguity.


18-25: Tighten terminology and add helpful links/context in Overview.

  • Specify if “Owner” is editable here or only via support.
  • “Plan Details” and “WEBKNOSSOS Credits”: link to billing/credits docs if available.
  • “Storage Usage”: include units and whether it aggregates object storage and local volumes.
  • “Member Information”: clarify whether disabled/suspended users are counted.

26-32: Notification recipients and delivery need specifics.

  • Can multiple recipients be configured (comma‑separated, list UI, groups)?
  • Are notifications also written to an audit log?
  • Prefer sentence case labels for bullets (e.g., “AI job completion”).

Apply this minimal copy edit to standardize casing:

- - **WEBKNOSSOS Plan & Subscription:** The email address to receive plan and subscription notifications.
- - **AI Job Completion:** Configure who receives notifications about completed AI [jobs](../automation/jobs.md).
- - **New User Signup:** The email address to receive notifications about new user signups.
+ - **WEBKNOSSOS plan & subscription:** The email address to receive plan and subscription notifications.
+ - **AI job completion:** Configure who receives notifications about completed AI [jobs](../automation/jobs.md).
+ - **New user signup:** The email address to receive notifications about new user signups.
docs/users/password.md (4)

11-15: Email change likely requires verification—document it.

Add that a confirmation link is sent to the new address and the change isn’t effective until confirmed. If domain restrictions exist (e.g., SSO or allowed domains), mention them.

 2. Enter the new email address and confirm the change.
 
 This email address will be used for all future notifications and for logging in.
+You’ll receive a confirmation link at the new address; the change takes effect only after confirmation.

19-32: Password requirements and lockout behavior missing.

Briefly document password strength rules (length/charset), reuse limits, and lockout/cool‑down after failed attempts, or link to a security policy page.


33-46: Fix passkeys management steps and add compatibility note.

  • Step 1 references the Password field; it should reference Passkeys.
  • Add a short note about device/browser support and that at least one recovery method (password) should remain enabled.
-1.  Click the `edit` icon next to the `Password` field to open the security management page.
+1.  Click the `edit` icon next to the `Passkeys` section to open the security management page.
 2.  To add a new passkey, press the `Register Passkey` button and give the passkey a name.
 3.  To delete a passkey, press the `Delete` button next to the passkey's name.
 
 If you lose access to all your passkeys and cannot sign in, use the `Forgot Password` flow to recover your account.
+Note: Passkeys require compatible devices/browsers. Keep a password configured as a recovery method.

49-53: Developer tokens: add safety guidance.

Recommend storing tokens securely, scoping/rotating them, and revoking on compromise.

 This section is for generating a personal access token (API key) for programmatic access to WEBKNOSSOS.
 
 This token is primarily used with the [WEBKNOSSOS Python library](https://docs.webknossos.org/webknossos-py/) to automate tasks like uploading/downloading datasets, managing annotations, and integrating WEBKNOSSOS into custom analysis pipelines.
+Security tips: store the token in a secrets manager, avoid committing it to source control, prefer least privilege scopes (if available), rotate regularly, and revoke immediately if exposed.
docs/users/index.md (1)

9-9: Align navigation label with target page title.

The target page H1 is “Account Settings”. Consider renaming the nav item to match for consistency.

-- [Account and password](password.md)
+- [Account settings](password.md)
docs/sharing/dataset_sharing.md (1)

8-8: Missing closing parenthesis in inline aside.

“(Details)” opens a parenthesis but never closes it.

Apply:

-The sharing link also encodes additional information, such as your current camera position/rotation, zoom level, any layers that are turned on/off, the selected node, etc ([Details](./annotation_sharing.md#sharing-link-format). In other words, a sharing link typically captures your current WEBKNOSSOS state so that any recipient can take off from the same situation.
+The sharing link also encodes additional information, such as your current camera position/rotation, zoom level, any layers that are turned on/off, the selected node, etc ([Details](./annotation_sharing.md#sharing-link-format)). In other words, a sharing link typically captures your current WEBKNOSSOS state so that any recipient can take off from the same situation.
docs/ui/object_info.md (2)

43-51: Use the new tab name consistently (“Bounding Boxes Tab”).

Section heading says “Bounding Boxes Tab” but the body still says “BBoxes”.

-## Bounding Boxes Tab
-
-The `BBoxes` tab lists all the bounding boxes in the annotation. From here, you can:
+## Bounding Boxes Tab
+
+The `Bounding Boxes` tab lists all the bounding boxes in the annotation. From here, you can:

53-56: Rename “AbsTree” to “Abstract Tree” for consistency.

-## Abstract Tree Tab
-
-The `AbsTree` tab displays a 2D representation of a skeleton annotation. This can be useful for visualizing the structure of large and complex skeletons. Be aware that generating the abstract tree can be resource-intensive for very large skeletons.
+## Abstract Tree Tab
+
+The `Abstract Tree` tab displays a 2D representation of a skeleton annotation. This can be useful for visualizing the structure of large and complex skeletons. Be aware that generating the abstract tree can be resource-intensive for very large skeletons.
docs/ui/toolbar.md (1)

129-132: Align naming and ensure a valid anchor exists.

  • Use “Bounding Boxes” (not “BBoxes”) to match the renamed tab.
  • Animations doc links to “#bounding-box-tool”, but this page doesn’t define that heading; promote the tool label to a proper “### Bounding Box Tool” heading so the anchor exists.
-To create a bounding box, select the tool and then click and drag with the mouse on one of the 2D viewports. You can resize the bounding box by dragging its corners or edges.
-
-All created bounding boxes are listed in the **BBoxes** tab in the right-hand sidebar. From there, you can manage your bounding boxes, for example, by renaming, deleting, or jumping to them. Read more about the sidebar tabs in the [Object Info and Lists](./object_info.md) documentation.
+To create a bounding box, select the tool and then click and drag with the mouse on one of the 2D viewports. You can resize the bounding box by dragging its corners or edges.
+
+All created bounding boxes are listed in the **Bounding Boxes** tab in the right-hand sidebar. From there, you can manage your bounding boxes, for example, by renaming, deleting, or jumping to them. Read more about the sidebar tabs in the [Object Info and Lists](./object_info.md) documentation.

Also change the tool label above into a heading:

-![Bounding Box Tool](./images/boundingbox-tool.jpg){align=left width="60"}
-**Bounding Box Tool**: Create a bounding box to define a region of interest for analysis, subdivide a dataset into smaller regions for the builtin automated workflows, or quickly export a region of interest.
+![Bounding Box Tool](./images/boundingbox-tool.jpg){align=left width="60"}
+### Bounding Box Tool
+Create a bounding box to define a region of interest for analysis, subdivide a dataset into smaller regions for the built-in automated workflows, or quickly export a region of interest.
docs/datasets/settings.md (4)

3-3: Grammar: plural “permissions”.

-You can configure the metadata, permission, and other properties of a dataset at any time.
+You can configure the metadata, permissions, and other properties of a dataset at any time.

29-31: Consistency and clarity: spacing, punctuation, and ID capitalization.

  • Add missing space after commas in the size tuple.
  • Use “i.e.,” with comma.
  • Use “ID” consistently.
-- **Bounding Box:** The position and extents of the layer in voxel coordinates. The format is `x, y, z, x_size,y_size, z_size` or respectively `min_x, min_y, min_z, (max_x - min_x), (max_y - min_y), (max_z - min_z)`.
-- **Category:** The type of the layer, i.e.  `color` for raw microscopy data and `segmentation` for segmentations.
-- **Largest Segment ID**: (Segmentation layer only). The highest ID that is currently used in a segmentation layer. When a user wants to annotate a new segment and clicks "Create new Segment Id" in the toolbar, the new ID is generated by incrementing the currently known largest segment id. This value is stored per annotation and is based on the corresponding property of the underlying dataset layer. If the id is not known, the user cannot generate new segment ids. However, they can still change the currently active ID to arbitrary values. Also, they can enter a largest segment id for their annotation without having to edit the dataset's value here (which they might not have the permissions for).
+- **Bounding Box:** The position and extents of the layer in voxel coordinates. The format is `x, y, z, x_size, y_size, z_size` or, respectively, `min_x, min_y, min_z, (max_x - min_x), (max_y - min_y), (max_z - min_z)`.
+- **Category:** The type of the layer, i.e., `color` for raw microscopy data and `segmentation` for segmentations.
+- **Largest Segment ID**: (segmentation layer only). The highest ID currently used in a segmentation layer. When a user wants to annotate a new segment and clicks “Create New Segment ID” in the toolbar, the new ID is generated by incrementing the currently known largest segment ID. This value is stored per annotation and is based on the corresponding property of the underlying dataset layer. If the ID is not known, the user cannot generate new segment IDs. However, they can still change the currently active ID to arbitrary values. They can also enter a largest segment ID for their annotation without having to edit the dataset’s value here (which they might not have the permissions for).

36-36: Screenshot caption references old tab name.

-![Dataset Editing: Data Tab](../images/dataset_data.jpeg)
+![Dataset Editing: Data Source Tab](../images/dataset_data.jpeg)

74-74: Grammar: “a dataset”.

-Deleting an dataset will not delete any annotations associated with it.
+Deleting a dataset will not delete any annotations associated with it.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d3f4a88 and 9d30a11.

📒 Files selected for processing (11)
  • docs/automation/animations.md (1 hunks)
  • docs/dashboard/datasets.md (1 hunks)
  • docs/datasets/settings.md (1 hunks)
  • docs/sharing/dataset_sharing.md (1 hunks)
  • docs/today_i_learned.md (1 hunks)
  • docs/ui/object_info.md (1 hunks)
  • docs/ui/toolbar.md (1 hunks)
  • docs/users/index.md (1 hunks)
  • docs/users/organizations.md (1 hunks)
  • docs/users/passkeys.md (0 hunks)
  • docs/users/password.md (1 hunks)
💤 Files with no reviewable changes (1)
  • docs/users/passkeys.md
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: build-smoketest-push
  • GitHub Check: backend-tests
  • GitHub Check: frontend-tests
🔇 Additional comments (6)
docs/users/index.md (1)

9-9: No lingering docs links to docs/users/passkeys.md — resolved.
Search found no references to passkeys.md; passkeys content now lives in docs/users/password.md. Add a redirect only if you need to preserve legacy URLs.

docs/dashboard/datasets.md (1)

14-14: LGTM — image and caption are consistent with the surrounding text.

docs/ui/object_info.md (1)

66-68: Minor grammar tweak.

[ suggest_nitpick_refactor ]

-You can customize the layout of the right-hand side panel to fit your workflow. You can reorder the tabs via drag-and-drop or hide or move them to a different position, e.g. showing two tabs at a time.
+You can customize the layout of the right-hand side panel to fit your workflow. You can reorder the tabs via drag-and-drop or hide/move them, e.g., to show two tabs at a time.
docs/automation/animations.md (1)

24-31: Minor wording fixes.

[ suggest_nitpick_refactor ]

-- **Static camera looking at XY/XZ/YZ-viewport:** The camera will be fixed on one of the 2D viewports.
+- **Static camera looking at the XY/XZ/YZ viewport:** The camera will be fixed on one of the 2D viewports.
docs/datasets/settings.md (2)

42-42: Wording: “Making a dataset public”.

[ suggest_nitpick_refactor ]

-- **Make dataset publicly accessible:** By default, a dataset can only be accessed by users from your organization with the correct access permissions. Turning a dataset to *public* will allow anyone to view the dataset with a sharing link, without needing a WEBKNOSSOS account.
+- **Make dataset publicly accessible:** By default, a dataset can only be accessed by users from your organization with the correct access permissions. Making a dataset *public* allows anyone to view it with a sharing link, without needing a WEBKNOSSOS account.

68-68: ```shell
#!/bin/bash
set -euo pipefail

Exclude common build and deps dirs

EXCLUDES=( --glob '!node_modules/' --glob '!dist/' --glob '!build/' --glob '!venv/' )

echo "1) Exact phrase (case-sensitive):"
rg -n --hidden -S 'Save View Configuration as Default' "${EXCLUDES[@]}" || true
echo

echo "2) Exact phrase (case-insensitive):"
rg -n --hidden -S -i 'Save view configuration as default' "${EXCLUDES[@]}" || true
echo

echo "3) 'Save View' occurrences (context):"
rg -n --hidden -S -i 'Save View' -C2 "${EXCLUDES[@]}" || true
echo

echo "4) 'view configuration' occurrences (context):"
rg -n --hidden -S -i 'view configuration' -C2 "${EXCLUDES[@]}" || true
echo

echo "5) Files containing both 'save' and 'view' (co-occurrence):"
rg -nP --hidden -S -i '(?s)save.*view|view.*save' -C2 "${EXCLUDES[@]}" || true
echo

echo "6) Search common i18n/locales files for 'save' or 'view' tokens:"
rg -n --hidden -S -g '**/*.{json,ts,tsx,js,jsx,yml,yaml,po,properties}' -i 'save|view' "${EXCLUDES[@]}" -C1 || true
echo

echo "7) Search for 'layer settings' references (docs mentions layer settings):"
rg -n --hidden -S -i 'layer settings' -C2 "${EXCLUDES[@]}" || true


</blockquote></details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

Comment on lines 46 to 47
- **Layer:** Select the data layer to be used for the animation.
- **Bounding Box:** Choose the bounding box for the animation. By default, the entire layer is selected. You can create custom bounding boxes using the [bounding box tool](../ui/toolbar.md#bounding-box-tool).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

🧩 Analysis chain

Broken cross-link likely (anchor missing).

This links to “../ui/toolbar.md#bounding-box-tool”, but the toolbar page currently lacks that heading. After promoting the label to a “### Bounding Box Tool” heading (see toolbar comment), this link will work.

Run:


🏁 Script executed:

#!/bin/bash
# Expect to find a "### Bounding Box Tool" heading; fail if missing.
rg -nP '^#{3,}\s+Bounding Box Tool\b' docs/ui/toolbar.md || { echo "Missing '### Bounding Box Tool' heading in docs/ui/toolbar.md"; exit 1; }

Length of output: 61


Add a ### Bounding Box Tool heading in docs/ui/toolbar.md. The link ../ui/toolbar.md#bounding-box-tool from docs/automation/animations.md (lines 46–47) is broken because that heading is missing; promote the label to ### Bounding Box Tool so the anchor resolves.

🤖 Prompt for AI Agents
In docs/ui/toolbar.md (add near the existing bounding box tool description), add
a third-level heading exactly titled "Bounding Box Tool" (### Bounding Box Tool)
immediately above the bounding box tool section so the anchor becomes
#bounding-box-tool and the link from docs/automation/animations.md lines 46–47
resolves; ensure the heading text matches the anchor casing/spacing and, if the
file uses explicit HTML anchors, add id="bounding-box-tool" to that heading.

Comment on lines +33 to +36
### Delete Organization

Deleting an organization will permanently remove all associated data, including annotations, datasets, and user accounts. This action cannot be undone.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Add explicit safeguards for organization deletion.

This is a destructive action. Document confirmation mechanics (type org name, second confirmation), who is permitted (Admin vs. Owner), retention/soft‑delete period (if any), and backup/export guidance before deletion.

Apply this addition:

 Deleting an organization will permanently remove all associated data, including annotations, datasets, and user accounts. This action cannot be undone.
+Before proceeding:
+- Ensure you have exported any datasets and annotations you need to retain.
+- You will be asked to type the organization name to confirm deletion.
+- Only the designated organization Owner (or an Admin with the required permission) may perform this action.
+- Deleted organizations cannot be restored unless a prior backup exists.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
### Delete Organization
Deleting an organization will permanently remove all associated data, including annotations, datasets, and user accounts. This action cannot be undone.
### Delete Organization
Deleting an organization will permanently remove all associated data, including annotations, datasets, and user accounts. This action cannot be undone.
Before proceeding:
- Ensure you have exported any datasets and annotations you need to retain.
- You will be asked to type the organization name to confirm deletion.
- Only the designated organization Owner (or an Admin with the required permission) may perform this action.
- Deleted organizations cannot be restored unless a prior backup exists.
🤖 Prompt for AI Agents
In docs/users/organizations.md around lines 33 to 36, the "Delete Organization"
section lacks explicit safeguards and procedural details; update this paragraph
to (1) require explicit confirmation mechanics (e.g., type the organization name
and a second confirmation checkbox or typing "DELETE" within UI or CLI), (2)
state who can perform deletion (clarify Admin vs Owner permissions and any
required approvals), (3) document retention/soft-delete behavior and time
windows (e.g., soft-delete for X days before permanent purge) and recovery
limitations, and (4) add pre-deletion guidance to export/backup critical data
and links to backup/export docs and contact support; keep the text concise and
add sub-bullets or short steps for the confirmation flow and links to
backup/export procedures.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (5)
docs/users/password.md (5)

11-15: Clarify email change confirmation and SSO constraints.

Document whether a verification email, re‑authentication (password/passkey), and uniqueness checks apply. Also note if email is IdP‑managed (OIDC/SAML), in which case changes must be done at the identity provider.

Apply this addition after the sentence on Line 15:

+Note:
+- You may be asked to re‑authenticate (password or passkey) before changing your email.
+- A verification link is sent to the new address; the change completes only after confirming it.
+- If your organization uses Single Sign‑On, your email might be managed by the identity provider and not editable here.

23-34: Add password policy and small UX details to reduce support friction.

List concrete password requirements and mention that reset emails expire and may land in spam. This prevents failed attempts and support tickets.

  **Logged-in users** can _change_ their account password:
@@
  **Logged-out users** can _reset_ a forgotten password:
@@
  3. You will receive an email with instructions to reset your password.
+
+Password requirements:
+- Minimum: <N> characters, must include <rules>.  (Replace with actual policy.)
+- Passwords previously breached or reused may be rejected.
+
+Tips:
+- The reset link expires after <duration>; request a new one if it’s expired.
+- Check your spam/junk folder if the email doesn’t arrive within a few minutes.

47-48: Recommend keeping at least one fallback sign‑in method.

Explicitly advise users to keep a backup passkey or a password to avoid account lockout.

-If you lose access to all your passkeys and cannot sign in, use the `Forgot Password` flow to recover your account.
+Keep at least one fallback (another passkey or a password). If you lose access to all passkeys, use `Forgot Password` to recover your account, then add a new passkey after signing in.

51-55: Add token hygiene: scopes, rotation, revocation, and storage.

Strengthen security guidance for personal access tokens (API keys).

 This section is for generating a personal access token (API key) for programmatic access to WEBKNOSSOS.
 
 This token is primarily used with the [WEBKNOSSOS Python library](https://docs.webknossos.org/webknossos-py/) to automate tasks like uploading/downloading datasets, managing annotations, and integrating WEBKNOSSOS into custom analysis pipelines.
+
+Best practices:
+- Generate the minimal scopes/permissions needed and prefer time‑limited tokens if available.
+- Store tokens only in secure secrets storage (e.g., environment variables, secret managers); never commit them to Git.
+- Rotate tokens regularly and immediately revoke compromised tokens in `Account Settings → Developer Settings`.
+- Use per‑machine/per‑service tokens to simplify revocation.

35-46: Optional: add a quick “What are passkeys?” reference link.

A short link to a vendor‑neutral explainer improves comprehension without bloating the page.

 ### Passkeys
-
-Passkeys are a new, more secure way to log in to websites and apps without using a password. Instead of typing a password, you use a fingerprint, face scan, or a device PIN to authenticate.
+Passkeys are a phishing‑resistant way to sign in without a password, using a fingerprint, face scan, or device PIN. Learn more in our Passkeys overview (vendor‑neutral).
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9d30a11 and e765dce.

📒 Files selected for processing (4)
  • docs/sharing/dataset_sharing.md (2 hunks)
  • docs/today_i_learned.md (1 hunks)
  • docs/users/organizations.md (1 hunks)
  • docs/users/password.md (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • docs/users/organizations.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • docs/sharing/dataset_sharing.md
  • docs/today_i_learned.md
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: build-smoketest-push
  • GitHub Check: frontend-tests
  • GitHub Check: backend-tests
🔇 Additional comments (2)
docs/users/password.md (2)

1-3: Ensure naming consistency with navigation/UI labels.

If the sidebar/menu item or page routing was renamed to “Account and password” (per related docs changes), align this H1 (“Account Settings”) and in-text references (“Account Settings”) accordingly, or vice versa, to avoid user confusion.


1-55: Set up redirect/alias from the removed passkeys page.

Since docs/users/passkeys.md was removed, ensure a redirect (site config or alias front‑matter) to this page’s Passkeys section to avoid 404s from existing links.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
docs/users/organizations.md (1)

39-43: Good implementation of deletion safeguards.

The "Before proceeding" section effectively addresses the concerns from the previous review by documenting:

  • Export requirements for data retention
  • Permission requirements (Owner or Admin)
  • Recovery limitations and backup dependency

This provides users with the necessary safeguards and procedural clarity for the destructive deletion action.

🧹 Nitpick comments (9)
docs/datasets/settings.md (8)

3-3: Grammar: pluralize “permission” and tighten wording.

Apply this diff:

-You can configure the metadata, permission, and other properties of a dataset at any time. To make changes, click on the **Settings** action next to a dataset in the **Datasets** tab of your dashboard.
+You can configure the metadata, permissions, and other properties of a dataset at any time. To make changes, click the **Settings** action next to a dataset in the **Datasets** tab of your dashboard.

22-22: Clarity: specify mirroring is per axis.

Apply this diff:

-You can also mirror the axes.
+You can also mirror individual axes.

29-31: Consistency and formatting: bounding-box spacing and “ID/id”.

Apply this diff:

-- **Bounding Box:** The position and extents of the layer in voxel coordinates. The format is `x, y, z, x_size,y_size, z_size` or respectively `min_x, min_y, min_z, (max_x - min_x), (max_y - min_y), (max_z - min_z)`.
+- **Bounding Box:** The position and extents of the layer in voxel coordinates. The format is `x, y, z, x_size, y_size, z_size` or, respectively, `min_x, min_y, min_z, (max_x - min_x), (max_y - min_y), (max_z - min_z)`.
-- **Category:** The type of the layer, i.e.  `color` for raw microscopy data and `segmentation` for segmentations.
+- **Category:** The type of the layer, i.e., `color` for raw microscopy data and `segmentation` for segmentations.
-- **Largest Segment ID**: (Segmentation layer only). The highest ID that is currently used in a segmentation layer. When a user wants to annotate a new segment and clicks "Create new Segment Id" in the toolbar, the new ID is generated by incrementing the currently known largest segment id. This value is stored per annotation and is based on the corresponding property of the underlying dataset layer. If the id is not known, the user cannot generate new segment ids. However, they can still change the currently active ID to arbitrary values. Also, they can enter a largest segment id for their annotation without having to edit the dataset's value here (which they might not have the permissions for).!
+- **Largest Segment ID:** (Segmentation layer only.) The highest ID that is currently used in a segmentation layer. When a user wants to annotate a new segment and clicks "Create new Segment ID" in the toolbar, the new ID is generated by incrementing the currently known largest segment ID. This value is stored per annotation and is based on the corresponding property of the underlying dataset layer. If the ID is not known, the user cannot generate new segment IDs. However, they can still change the currently active ID to arbitrary values. Also, they can enter a largest segment ID for their annotation without having to edit the dataset’s value here (which they might not have permissions for).

45-45: Wording: “Turning a dataset to public” → “Making a dataset public”.

Apply this diff:

-- **Make dataset publicly accessible:** By default, a dataset can only be accessed by users from your organization with the correct access permissions. Turning a dataset to *public* will allow anyone to view the dataset with a sharing link, without needing a WEBKNOSSOS account.
+- **Make dataset publicly accessible:** By default, a dataset can only be accessed by users from your organization with the correct access permissions. Making a dataset *public* allows anyone to view the dataset with a sharing link, without needing a WEBKNOSSOS account.

49-49: Wording: simplify the bullet label.

Apply this diff:

-- **Users with access permission to work with this dataset:** A list of all users that have access to the dataset.
+- **Users with permission to work with this dataset:** A list of all users who have access to the dataset.

69-71: Terminology: hyphenate “4‑bit”; minor comma tweak.

Apply this diff:

-- **Position, Zoom, and Rotation:** Set the default camera position, zoom level, and rotation.
+- **Position, Zoom, and Rotation:** Set the default camera position, zoom level, and rotation.
-- **Rendering Options:** Configure default rendering settings like `Interpolation`, `4 Bit` rendering, and `Blend Mode`.
+- **Rendering Options:** Configure default rendering settings like `Interpolation`, `4‑bit` rendering, and `Blend Mode`.
-- **Layer Configuration:** An advanced feature to control the default settings on a per-layer basis using a JSON object. You can configure properties like visibility, opacity, color, and intensity range.
+- **Layer Configuration:** An advanced feature to control default settings on a per‑layer basis using a JSON object. You can configure properties like visibility, opacity, color, and intensity range.

73-73: UI label style: use code formatting for the button label.

Apply this diff:

-Alternatively, you can set the default view configuration from the main annotation view by clicking the "Save View Configuration as Default" button in the layer settings.
+Alternatively, you can set the default view configuration from the main annotation view by clicking the `Save View Configuration as Default` button in the layer settings.

80-83: Deletion section: strengthen with an admonition and fix article typo.

Apply this diff:

-This tab offers an option to delete the dataset. This action is irreversible and will permanently remove the dataset from WEBKNOSSOS.
-
-Deleting an dataset will not delete any annotations associated with it.
+This tab offers an option to delete the dataset.
+
+!!! danger "Irreversible action"
+    Deleting a dataset is irreversible and will permanently remove the dataset from WEBKNOSSOS.
+    Deleting a dataset will not delete any annotations associated with it.
docs/users/organizations.md (1)

46-46: Fix the typo in the sentence.

There's a grammatical error with an extra comma and period.

-A WEBKNOSSOS user account can be part of more than one organization, .e.g., when your are invited to collaborate on projects of another institute, working as a different WEBKNOSSOS organization.
+A WEBKNOSSOS user account can be part of more than one organization, e.g., when you are invited to collaborate on projects of another institute, working as a different WEBKNOSSOS organization.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e765dce and 5705814.

⛔ Files ignored due to path filters (11)
  • docs/images/dataset_data.jpeg is excluded by !**/*.jpeg
  • docs/images/dataset_general.jpeg is excluded by !**/*.jpeg
  • docs/images/dataset_settings_datasource.jpeg is excluded by !**/*.jpeg
  • docs/images/dataset_settings_delete.jpeg is excluded by !**/*.jpeg
  • docs/images/dataset_settings_metadata.jpeg is excluded by !**/*.jpeg
  • docs/images/dataset_settings_sharing.jpeg is excluded by !**/*.jpeg
  • docs/images/dataset_settings_viewconfig.jpeg is excluded by !**/*.jpeg
  • docs/images/dataset_view_config.jpeg is excluded by !**/*.jpeg
  • docs/images/delete_tab.jpeg is excluded by !**/*.jpeg
  • docs/images/metadata_tab.jpeg is excluded by !**/*.jpeg
  • docs/images/sharing_tab.jpeg is excluded by !**/*.jpeg
📒 Files selected for processing (4)
  • docs/automation/animations.md (1 hunks)
  • docs/datasets/settings.md (1 hunks)
  • docs/users/organizations.md (1 hunks)
  • docs/users/password.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • docs/automation/animations.md
  • docs/users/password.md
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: build-smoketest-push
  • GitHub Check: frontend-tests
  • GitHub Check: backend-tests
🔇 Additional comments (4)
docs/datasets/settings.md (2)

9-26: Good structural rework: clearer tabs and sectioning.

The tab-based breakdown (Data Source, General Settings, Axis Rotation, Layer Settings) is a solid improvement in scannability and aligns with the rest of the UI docs.


7-7: Cross‑links and images verified — no action needed.
All referenced Markdown files and images exist; the #dataset-metadata-specification anchor is present in docs/data/concepts.md.

docs/users/organizations.md (2)

12-44: LGTM! The organization management section is comprehensive and addresses previous feedback.

The new "Managing Your Organization" section provides clear documentation for admin users, with well-structured subsections covering overview, notifications, and deletion procedures. The deletion section now includes appropriate safeguards and procedural details as requested in previous reviews.


32-32: Link verified — docs/automation/jobs.md exists and is accessible.
No action required.

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Copy link
Member

@normanrz normanrz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice stuff!

@hotzenklotz hotzenklotz merged commit bee0e1c into master Sep 19, 2025
5 checks passed
@hotzenklotz hotzenklotz deleted the update-docs branch September 19, 2025 08:26
@coderabbitai coderabbitai bot mentioned this pull request Sep 22, 2025
7 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants