You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Staging PR — never merge; promoted to sillsdev when polished (see FORK.md).
Docusaurus site at docs/, in three product-scoped sections: /fw-lite/ (the app guide, home of the interactive "How sync works" explainer), /lexbox/ (accounts, project hosting, Send/Receive, members and roles, organizations, and a manager-facing bridge page for enabling FieldWorks Lite), and /technical/. The homepage routes readers with product tiles; old /user-guide/* URLs redirect. Explainer content lives in one data file (docs/src/components/SyncExplainer/syncScenarios.ts); DOCS-PLAN.md records the decisions, including the deep-link registry for the apps.
docs/ becomes a Docusaurus site with a user guide and technical section,
seeded from existing README/AGENTS.md content. The user guide's 'How sync
works' page is an interactive question-driven explainer (all content in
docs/src/components/SyncExplainer/syncScenarios.ts). DOCS-PLAN.md records
the tooling survey and decisions.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 19d649ac-0921-4d17-b474-c27c55edefb4
You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.
Use the checkbox below for a quick retry:
🔍 Trigger review
📝 Walkthrough
Walkthrough
Changes
Documentation site
Layer / File(s)
Summary
Docusaurus foundation and deployment .github/workflows/docs.yaml, docs/docusaurus.config.ts, docs/package.json, docs/tsconfig.json, docs/sidebars.ts, docs/.gitignore, docs/pnpm-workspace.yaml, docs/src/css/custom.css
Adds the Docusaurus configuration, package setup, sidebar generation, TypeScript settings, theme styling, ignored artifacts, and GitHub Pages build/deployment workflow.
Site entry points and navigation docs/src/pages/*, docs/user-guide/index.md, docs/user-guide/getting-started.md, docs/user-guide/faq.md, docs/technical/index.md
Adds the site homepage, navigation cards, user-guide landing content, getting-started instructions, FAQ, and technical documentation entry point.
Adds scenario data, interactive topology and stepper behavior, responsive styling, and the user-facing sync explanation.
Technical architecture, sync, and development docs docs/technical/architecture/*, docs/technical/sync/*, docs/technical/development/*, docs/technical/ci-cd.md
Documents architecture, integrations, CI/CD, local development, CRDT synchronization, FwHeadless merges, and the four-hop sync chain.
We reviewed changes in e221be6...f6dcc2d on this pull request. Below is the summary for the review, and you can see the individual issues we found as inline review comments.
AI Review is run only on demand for your team. We're only showing results of static analysis review right now. To trigger AI Review, comment @deepsourcebot review on this thread.
The reason will be displayed to describe this comment to others. Learn more.
Unexpected function declaration in the global scope, wrap in an IIFE for a local variable, assign as global property for a global variable
It is considered a best practice to avoid 'polluting' the global scope with variables that are intended to be local to the script. Global variables created from a script can produce name collisions with global variables created from another script, which will usually lead to runtime errors or unexpected behavior. It is mostly useful for browser scripts.
The reason will be displayed to describe this comment to others. Learn more.
Unexpected function declaration in the global scope, wrap in an IIFE for a local variable, assign as global property for a global variable
It is considered a best practice to avoid 'polluting' the global scope with variables that are intended to be local to the script. Global variables created from a script can produce name collisions with global variables created from another script, which will usually lead to runtime errors or unexpected behavior. It is mostly useful for browser scripts.
The reason will be displayed to describe this comment to others. Learn more.
Do not use Array index in keys
When rendering a list of items in React, it is necessary to pass a "key" prop.
This key is used by React to identify which items have changed, are added, or are removed and should be stable.
It is not recommended to use the index of an element as key because it doesn't uniquely identify the element.
When elements are added/removed from an array, the index of an element may change, which will result in unnecessary re-renders.
The reason will be displayed to describe this comment to others. Learn more.
use `Boolean(step?.t1)` instead
Prefer using explicit casts by calling Number, Boolean, or String over using operators like +, !! or "" +. This is considered best practice as it improves readability.
The reason will be displayed to describe this comment to others. Learn more.
`onKeyDown` has a cyclomatic complexity of 6 with "medium" risk
A function with high cyclomatic complexity can be hard to understand and
maintain. Cyclomatic complexity is a software metric that measures the number of
independent paths through a function. A higher cyclomatic complexity indicates
that the function has more decision points and is more complex.
The reason will be displayed to describe this comment to others. Learn more.
Arrow function expected no return value
Any code paths that do not have explicit returns will return undefined. It is recommended to replace any implicit dead-ends that return undefined with a return null statement.
The reason will be displayed to describe this comment to others. Learn more.
JSX tree is too deeply nested. Found 6 levels of nesting
Nesting JSX elements too deeply can confuse developers reading the code. To make maintenance and refactoring easier, DeepSource recommends limiting the maximum JSX tree depth to 4.
The reason will be displayed to describe this comment to others. Learn more.
Unexpected function declaration in the global scope, wrap in an IIFE for a local variable, assign as global property for a global variable
It is considered a best practice to avoid 'polluting' the global scope with variables that are intended to be local to the script. Global variables created from a script can produce name collisions with global variables created from another script, which will usually lead to runtime errors or unexpected behavior. It is mostly useful for browser scripts.
Named type imports in the Docusaurus config, Boolean() coercions,
content-derived keys, arrow-const components, and Topology/Stepper
extracted from SyncExplainer. DOCS-PLAN.md gains the FieldWorks Classic
docs relationship and the React-vs-Svelte decision with its revisit
trigger.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The reason will be displayed to describe this comment to others. Learn more.
`SyncExplainer` has a cyclomatic complexity of 6 with "medium" risk
A function with high cyclomatic complexity can be hard to understand and
maintain. Cyclomatic complexity is a software metric that measures the number of
independent paths through a function. A higher cyclomatic complexity indicates
that the function has more decision points and is more complex.
The reason will be displayed to describe this comment to others. Learn more.
Arrow function expected no return value
Any code paths that do not have explicit returns will return undefined. It is recommended to replace any implicit dead-ends that return undefined with a return null statement.
Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.
Lets CI deploy previews to another host (e.g. a fork's GitHub Pages)
until the production URL is decided.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ignore CSS Modules pseudo-classes in Stylelint :global is valid CSS Modules syntax; add global/local to selector-pseudo-class-no-unknown.ignorePseudoClasses (or use a CSS-Modules-aware config) instead of changing this selector.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/src/components/SyncExplainer/styles.module.css` at line 21, Update the
Stylelint configuration’s selector-pseudo-class-no-unknown rule to ignore the
valid CSS Modules pseudo-classes global and local. Preserve the :global selector
in the .root styles and avoid changing the stylesheet selector.
Source: Linters/SAST tools
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/docs.yaml:
- Line 27: Update the actions/checkout step in the docs workflow to set
persist-credentials to false, ensuring the GitHub token is not retained in
.git/config during subsequent pnpm install and pnpm build steps.
In `@docs/docusaurus.config.ts`:
- Around line 19-21: Update the Docusaurus configuration’s url and baseUrl
values to match the finalized deployment origin, using the GitHub Pages project
URL and corresponding repository subpath when a custom domain is not selected,
or the custom-domain root values when it is selected. Do not enable production
deployment until these values reflect the actual hosting target.
In `@docs/pnpm-workspace.yaml`:
- Around line 1-3: Replace the ignoredBuiltDependencies configuration in
pnpm-workspace.yaml with onlyBuiltDependencies, preserving `@swc/core` and core-js
in the allowlist so pnpm permits their build scripts in the docs workspace.
In `@docs/technical/architecture/overview.md`:
- Around line 6-12: Update the opening architecture description to distinguish
shared server-side storage from FW Lite’s local SQLite storage: state that
Lexbox and FwHeadless share the database and Mercurial repositories, while FW
Lite keeps a local project copy and synchronizes through Lexbox’s API. Keep the
component table consistent with this ownership and deployment boundary.
In `@docs/technical/development/index.md`:
- Line 23: Update the setup instructions around the `git push` command to remove
the write operation and use a read-only credential check such as `git ls-remote
origin HEAD` instead, while preserving the subsequent `task setup` step.
In `@docs/user-guide/faq.md`:
- Line 9: Update all seven FAQ question headings in the document, including “Do
I need a Lexbox account?” and the headings at the referenced locations, from
level-3 (`###`) to level-2 (`##`) headings. Leave the questions’ text and
surrounding content unchanged.
---
Nitpick comments:
In `@docs/src/components/SyncExplainer/styles.module.css`:
- Line 21: Update the Stylelint configuration’s selector-pseudo-class-no-unknown
rule to ignore the valid CSS Modules pseudo-classes global and local. Preserve
the :global selector in the .root styles and avoid changing the stylesheet
selector.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
Push a commit to this branch (recommended)
Create a new PR with the fixes
ℹ️ Review info⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: e32f3b1b-8032-4d4f-bbc0-3340e865134f
📥 Commits
Reviewing files that changed from the base of the PR and between e221be6 and 8ebc55a.
⛔ Files ignored due to path filters (5)
docs/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
docs/static/img/error-example.png is excluded by !**/*.png
docs/static/img/favicon.png is excluded by !**/*.png
docs/static/img/logo-dark.svg is excluded by !**/*.svg
The reason will be displayed to describe this comment to others. Learn more.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Disable checkout credential persistence.
The checkout action leaves the GitHub token in .git/config while pnpm install and pnpm build execute PR-controlled code. Set persist-credentials: false; no later step requires authenticated Git operations.
‼️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.
[warning] 27-27: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false
(artipacked)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/workflows/docs.yaml at line 27, Update the actions/checkout step in
the docs workflow to set persist-credentials to false, ensuring the GitHub token
is not retained in .git/config during subsequent pnpm install and pnpm build
steps.
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Choose the deployment origin before publishing.
url is hardcoded to https://docs.lexbox.org while the deployment target is still undecided. If GitHub Pages uses the project URL instead of that custom domain, baseUrl: '/' will also produce incorrect canonical URLs and asset/navigation paths. Set url and baseUrl to the final Pages/custom-domain values before enabling production deployment.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/docusaurus.config.ts` around lines 19 - 21, Update the Docusaurus
configuration’s url and baseUrl values to match the finalized deployment origin,
using the GitHub Pages project URL and corresponding repository subpath when a
custom domain is not selected, or the custom-domain root values when it is
selected. Do not enable production deployment until these values reflect the
actual hosting target.
In pnpm v11 and later, the settings ignoredBuiltDependencies, onlyBuiltDependencies, and neverBuiltDependencies have been removed and replaced by a unified allowBuilds configuration in pnpm-workspace.yaml [1][2]. The allowBuilds setting provides a single source of truth for controlling which dependencies are permitted to execute their lifecycle scripts (such as preinstall, install, or postinstall) during installation [2][3]. Key details regarding the transition and current usage: - Unified Configuration: allowBuilds is a map that associates package names with a boolean value: true to allow script execution, or false to disallow it [1][3]. - Migration: If you were previously using the deprecated settings, you should migrate them to the allowBuilds format [1][2]. For example: - Old configuration (deprecated): yaml onlyBuiltDependencies: - electron ignoredBuiltDependencies: - esbuild - New configuration (recommended): yaml allowBuilds: electron: true esbuild: false - Default Behavior: Packages not explicitly listed in allowBuilds are disallowed from running build scripts by default [3]. If a package attempts to run a script without being explicitly allowed, pnpm will print a warning or throw an error depending on the strictDepBuilds setting [2][3]. - Management Tools: You can use pnpm approve-builds to interactively manage these permissions [4]. Running this command will automatically update the allowBuilds configuration in your pnpm-workspace.yaml file [1][4]. - Configuration Location: Since pnpm v11, these settings are no longer read from the pnpm field in package.json and must be defined in pnpm-workspace.yaml [5].
In pnpm v11+, the legacy settings onlyBuiltDependencies and ignoredBuiltDependencies have been removed [1][2]. They have been replaced by a single configuration field called allowBuilds in pnpm-workspace.yaml [1][2]. If you are upgrading to or using pnpm v11, you must migrate your configuration [2]: // Old configuration (deprecated/removed) onlyBuiltDependencies: - electron ignoredBuiltDependencies: - esbuild // New configuration (pnpm v11+) allowBuilds: electron: true esbuild: false For Docusaurus, "Docusaurus Faster" is a suite of performance optimizations that is now stable and recommended [3]. In Docusaurus 3.10+, you should update your docusaurus.config.js to use the faster flag instead of the legacy experimental_faster flag [3]: const config = { future: { faster: true, // Replaces experimental_faster: true }, }; These optimizations include switching to SWC for JS/CSS transpilation and minification, among other tools, which effectively replace older Babel or Terser-based approaches [4][3]. If you are manually managing core-js or other dependencies, ensure they are correctly set in your allowBuilds configuration if they require build scripts to execute during installation [1][2]. top_results: [1][2][4][3]
When using Docusaurus Faster, which leverages tools like Rspack and SWC for improved build performance, you may encounter issues with pnpm's strict dependency management [1][2]. Because Docusaurus Faster relies on specific versions of packages like @swc/core and core-js, pnpm's default behavior may attempt to restrict their installation or execution if they are considered "built dependencies" or if they interact with the package manager's security settings [1]. To resolve this, you should configure your.npmrc file (specifically for pnpm) to allow these packages to be built. The official Docusaurus documentation recommends the following pnpm configuration to ensure compatibility with Docusaurus Faster [1]: allowBuilds: '@swc/core': true core-js-pure: true core-js: true This configuration explicitly permits pnpm to run build scripts for these specific packages, which is often required because Docusaurus Faster expects them to be fully available and functional as part of the modernized build pipeline [1]. Ensure that your pnpm setup also respects other relevant security settings (such as trustPolicy) as recommended in your project's specific environment [1].
Allow these build scripts in the docs workspace.ignoredBuiltDependencies blocks @swc/core and core-js, but Docusaurus Faster needs those installs to run cleanly under pnpm 10.24.0. Switch this to onlyBuiltDependencies so clean installs keep the SWC binding available and docusaurus build doesn’t fail.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/pnpm-workspace.yaml` around lines 1 - 3, Replace the
ignoredBuiltDependencies configuration in pnpm-workspace.yaml with
onlyBuiltDependencies, preserving `@swc/core` and core-js in the allowlist so pnpm
permits their build scripts in the docs workspace.
Three things live in this repo, and they share one database and one set of Mercurial repositories.
| Part | What it is |
| --- | --- |
| **Lexbox** (formerly Language Depot) | The web app and project host: user/org/project management, permissions, and the server side of both sync protocols. SvelteKit UI in front of a .NET API. |
| **FieldWorks Lite** (FW Lite) | A lightweight dictionary editor for desktop, mobile and browser. Keeps a local SQLite copy of the project and syncs it to Lexbox as CRDT commits. |
| **FwHeadless** | The server-side bridge between the CRDT world (FW Lite) and the Mercurial world (classic FieldWorks). It runs the merge job that reconciles the two. |
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Correct the shared-storage description.
The opening sentence says Lexbox, FW Lite, and FwHeadless share one database and Mercurial repository set, but FW Lite uses a local SQLite copy and synchronizes through the API. This can mislead implementers about data ownership and deployment boundaries.
Proposed wording
-Three things live in this repo, and they share one database and one set of Mercurial repositories.+Three major components live in this repo. Lexbox and FwHeadless share the server-side database and Mercurial repositories; FW Lite keeps a local SQLite project copy and synchronizes through the API.
📝 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
Three things live in this repo, and they share one database and one set of Mercurial repositories.
| Part | What it is |
| --- | --- |
|**Lexbox** (formerly Language Depot) | The web app and project host: user/org/project management, permissions, and the server side of both sync protocols. SvelteKit UI in front of a .NET API. |
|**FieldWorks Lite** (FW Lite) | A lightweight dictionary editor for desktop, mobile and browser. Keeps a local SQLite copy of the project and syncs it to Lexbox as CRDT commits. |
|**FwHeadless**| The server-side bridge between the CRDT world (FW Lite) and the Mercurial world (classic FieldWorks). It runs the merge job that reconciles the two. |
Three major components live in this repo. Lexbox and FwHeadless share the server-side database and Mercurial repositories; FW Lite keeps a local SQLite project copy and synchronizes through the API.
| Part | What it is |
| --- | --- |
|**Lexbox** (formerly Language Depot) | The web app and project host: user/org/project management, permissions, and the server side of both sync protocols. SvelteKit UI in front of a .NET API. |
|**FieldWorks Lite** (FW Lite) | A lightweight dictionary editor for desktop, mobile and browser. Keeps a local SQLite copy of the project and syncs it to Lexbox as CRDT commits. |
|**FwHeadless**| The server-side bridge between the CRDT world (FW Lite) and the Mercurial world (classic FieldWorks). It runs the merge job that reconciles the two. |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/technical/architecture/overview.md` around lines 6 - 12, Update the
opening architecture description to distinguish shared server-side storage from
FW Lite’s local SQLite storage: state that Lexbox and FwHeadless share the
database and Mercurial repositories, while FW Lite keeps a local project copy
and synchronizes through Lexbox’s API. Keep the component table consistent with
this ownership and deployment boundary.
Then run `git push` once to confirm your GitHub credentials work, and `task setup`, which initializes `local.env`, points Git at the ignore-revs file, and downloads the FLEx seed-data repo.
The reason will be displayed to describe this comment to others. Learn more.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Do not use git push as a setup credential check.
This can publish unintended commits to the remote repository. Remove it or replace it with a read-only check such as git ls-remote origin HEAD.
Proposed wording
-Then run `git push` once to confirm your GitHub credentials work, and `task setup`, which initializes `local.env`, points Git at the ignore-revs file, and downloads the FLEx seed-data repo.+Verify repository access with a read-only command such as `git ls-remote origin HEAD`, then run `task setup`, which initializes `local.env`, points Git at the ignore-revs file, and downloads the FLEx seed-data repo.
📝 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
Then run `git push` once to confirm your GitHub credentials work, and`task setup`, which initializes `local.env`, points Git at the ignore-revs file, and downloads the FLEx seed-data repo.
Verify repository access with a read-only command such as `git ls-remote origin HEAD`, then run`task setup`, which initializes `local.env`, points Git at the ignore-revs file, and downloads the FLEx seed-data repo.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/technical/development/index.md` at line 23, Update the setup
instructions around the `git push` command to remove the write operation and use
a read-only credential check such as `git ls-remote origin HEAD` instead, while
preserving the subsequent `task setup` step.
The rendered document already has a title heading, so these top-level questions should use ##, not ###. Apply the same change to all seven question headings to resolve the reported MD001 violation.
Proposed fix
-### Do I need a Lexbox account?+## Do I need a Lexbox account?
Also applies to: 15-15, 22-22, 27-27, 32-32, 39-39, 47-47
🧰 Tools🪛 markdownlint-cli2 (0.23.1)
[warning] 9-9: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/user-guide/faq.md` at line 9, Update all seven FAQ question headings in
the document, including “Do I need a Lexbox account?” and the headings at the
referenced locations, from level-3 (`###`) to level-2 (`##`) headings. Leave the
questions’ text and surrounding content unchanged.
persist-credentials off in the docs workflow checkout, correct the
shared-storage claim in the system overview, read-only credential check
in the dev setup, FAQ headings to level 2.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Applied 4 of the 6 review suggestions (persist-credentials, overview wording, read-only credential check, FAQ heading levels). Two dismissed:
Hardcoded site URL: made env-overridable (DOCS_URL/DOCS_BASE_URL) in 23ec7d0, which landed after the reviewed commit; the production URL itself is a pending team decision recorded in DOCS-PLAN.md.
ignoredBuiltDependencies → onlyBuiltDependencies: clean installs and builds are proven green with the current setting (four CI runs on ubuntu plus local Windows builds). @swc/core ships prebuilt platform binaries, so its install script is a fallback we don't need to run.
Empty split parts produced duplicate position keys; skip them and count
the ** markers when advancing.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Correct the platform list (no Mac or iOS builds ship), add a scenario
step disclosing that the FW Lite Sync button and the project page's
'Sync FieldWorks Lite' are the same action, and add a 'Where you'll see
this in the app' section mapping each leg to its dialog tab, statuses,
and buttons.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The reason will be displayed to describe this comment to others. Learn more.
`SyncExplainer` has a cyclomatic complexity of 6 with "medium" risk
A function with high cyclomatic complexity can be hard to understand and
maintain. Cyclomatic complexity is a software metric that measures the number of
independent paths through a function. A higher cyclomatic complexity indicates
that the function has more decision points and is more complex.
The always-reserved space read as a dead gap between the device box and
leg 1, worst on mobile. Also tell pure-FieldWorks-Lite teams up front
that legs 2 and 3 don't concern them.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The reason will be displayed to describe this comment to others. Learn more.
`Topology` has a cyclomatic complexity of 6 with "medium" risk
A function with high cyclomatic complexity can be hard to understand and
maintain. Cyclomatic complexity is a software metric that measures the number of
independent paths through a function. A higher cyclomatic complexity indicates
that the function has more decision points and is more complex.
The reason will be displayed to describe this comment to others. Learn more.
`SyncExplainer` has a cyclomatic complexity of 7 with "medium" risk
A function with high cyclomatic complexity can be hard to understand and
maintain. Cyclomatic complexity is a software metric that measures the number of
independent paths through a function. A higher cyclomatic complexity indicates
that the function has more decision points and is more complex.
- Ground "Lexbox" for FieldWorks Lite users in the user-guide index and a new
FAQ, so the FWL guide stays self-contained and doesn't assume readers know
or visit Lexbox.
- Explain the sync snapshot as the JSON file recording the last merged state
(the diff baseline, and the "have we synced before?" flag), instead of using
the bare term "ProjectSnapshot".
- Make the explainer diagram interactive: the three leg triggers are now
tap/click toggletips (touch + keyboard + screen-reader friendly) that reveal
where the Sync button lives and that its two names are the same action.
- Color the diagram's leg numbers at rest to match the numbered table below,
so a leg in the diagram ties to its row.
- Put the caption and stepper directly under the diagram in one "player" card
so the controls read as driving the picture; compact the phone layout and
scroll the player into view on select so the diagram and Next are co-visible.
- Turn the diagram vertical by container width (not viewport) so the wide
horizontal layout never overflows the docs column into the sidebars.
- Give the page real section headings so "On this page" lists the first
section instead of starting mid-page.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TZKRnigoAXxEWZVJFrto1k
The reason will be displayed to describe this comment to others. Learn more.
`Connector` has a cyclomatic complexity of 8 with "medium" risk
A function with high cyclomatic complexity can be hard to understand and
maintain. Cyclomatic complexity is a software metric that measures the number of
independent paths through a function. A higher cyclomatic complexity indicates
that the function has more decision points and is more complex.
The reason will be displayed to describe this comment to others. Learn more.
`SyncExplainer` has a cyclomatic complexity of 8 with "medium" risk
A function with high cyclomatic complexity can be hard to understand and
maintain. Cyclomatic complexity is a software metric that measures the number of
independent paths through a function. A higher cyclomatic complexity indicates
that the function has more decision points and is more complex.
/user-guide/ becomes /fw-lite/ (old URLs redirect client-side) and a new
/lexbox/ section covers accounts, project hosting, Send/Receive, members
and roles, organizations, and a manager-facing FieldWorks Lite bridge
page; the homepage routes readers with product tiles. Also fixes
admonition titles to the Docusaurus 3 bracket syntax - the old
space-separated titles rendered as literal ::: text.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Corrections verified against the code:
- CI/CD: staging deploys before integration tests and tests don't gate
production (approval does); fw-lite also publishes Android; FwHeadless is
a deployed workload. Same fixes in .github/AGENTS.md, which the docs copied.
- develop hg/resumable hostnames per the ingress (also deployment/README.md)
- task k8s: prefixes for the forward tasks (also README.md)
- FwHeadless flowchart: pre-merge Harmony sync only runs when a snapshot exists
- CRDT sync: the queue doesn't dedup; listener start moved to SyncService
- Lexbox UI facts: New Word button, no Open button, early access on
wheresMyProject, ask-to-join is org-scoped, org invites need the Invite
checkbox, project suggestions are org-scoped, Viewer on FieldWorks projects
- "Lexbox" spelling in the sync pages; Nitro (ex Banana Cake Pop)
- lexbox/fw-lite.md now names both sync buttons and says they're the same
- docs.yaml sets DOCS_URL/DOCS_BASE_URL from the repo so a Pages deploy
works before the final docs home is decided
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
[Claude, autonomous]
Staging PR — never merge; promoted to sillsdev when polished (see FORK.md).
Docusaurus site at
docs/, in three product-scoped sections:/fw-lite/(the app guide, home of the interactive "How sync works" explainer),/lexbox/(accounts, project hosting, Send/Receive, members and roles, organizations, and a manager-facing bridge page for enabling FieldWorks Lite), and/technical/. The homepage routes readers with product tiles; old/user-guide/*URLs redirect. Explainer content lives in one data file (docs/src/components/SyncExplainer/syncScenarios.ts);DOCS-PLAN.mdrecords the decisions, including the deep-link registry for the apps.Preview: https://myieye.github.io/languageforge-lexbox/
Screenshots
🤖 Generated with Claude Code