Skip to content

Feat: Add Docker setup, CMake and cross-platform build scripts - #139

Merged
Ryan-Millard merged 33 commits into
mainfrom
feat/docker-docker-compose/issue-127
Dec 22, 2025
Merged

Feat: Add Docker setup, CMake and cross-platform build scripts#139
Ryan-Millard merged 33 commits into
mainfrom
feat/docker-docker-compose/issue-127

Conversation

@Ryan-Millard

@Ryan-Millard Ryan-Millard commented Dec 20, 2025

Copy link
Copy Markdown
Owner

✨ Feature Pull Request

Proposal for new features or enhancements

📌 Description

Improves developer experience by making the entire app platform-agnostic during development.

  • npm scripts are cross-platform compatible and documenting which scripts work natively on Windows vs require WSL.
  • Docker & Docker Compose set up for development with a helper wrapper for simpler onboarding of new devs.

🔗 Issue

Fixes #80
Fixes #127
Closes #107
Closes #109

Replaces #93

Changes

  • New feature
  • Enhancement

Changes in #93 / #80

  • Replace rm -rf with rimraf in clean-js script for cross-platform compatibility
  • Add comprehensive Windows Compatibility section to WASM setup docs
  • Document which scripts work natively on Windows vs require WSL
  • Remove HELP WANTED admonition
  • Add missing help description in docs/scripts/help.js
  • Fix typo in frontmatter ID (wasm-setup-depencenciesswasm-setup-dependencies)

Scripts now working natively on Windows:

  • dev, dev:all, preview, build-js, clean-js
  • lint, lint:fix, lint:style, format, format-js, format-wasm
  • docs, help, release

WASM scripts still require WSL (Emscripten recommendation):

  • build-wasm, build-wasm:debug, clean-wasm
  • build, clean (chain WASM builds)
  • dev:debug, dev:all:debug

Changes in #127

  • Set up complete docker environment to allow development in both the main app and the docs app
  • Create a helper script (./img2num) to help with onboarding new devs in:
    • Bash
    • PowerShell
    • Batch

🧪 How Has This Been Tested?

#93

  • Tested all cross-platform scripts on macOS
  • Verified npm run clean-js works with rimraf (exits 0 on non-existent dir)
  • Verified npm run lint, npm run format-js, npm run format-wasm all pass
  • Built WASM modules with Emscripten and ran full dev server
  • Tested image upload and color-by-number conversion end-to-end

#127

  • Does not apply

🧩 Checklist

  • I've followed the contribution guidelines.
  • My code follows the code style of this project.
  • I've updated the documentation where applicable.
  • I've linked related issues or discussions (if any).
  • I've checked for breaking changes and backwards compatibility.

📸 Screenshots / Demo (if applicable)

N/A - Infrastructure/documentation change

💬 Additional Context

The approach preserves the existing Makefile architecture for WASM builds (extensible for new modules) while documenting that WSL is required for WASM development on Windows. This aligns with Emscripten's recommendations.

Frontend-only development now works fully natively on Windows without any Unix tools.

Summary by CodeRabbit

  • New Features

    • Docker-based development environment with an accessible dev server, polling-based hot-reload, and a dev-entry script.
    • Cross-platform CLI wrappers for common tasks, interactive shells, and container lifecycle commands.
  • Documentation

    • Major Getting Started overhaul with Docker-first, OS-aware flows and extensive WASM workflow updates.
    • Updated contributor and coding-style guidance and doc navigation.
  • Chores

    • Migrated WASM build system to CMake with a cross-platform build/clean script and updated npm scripts.
    • Improved ignore rules and editor/editorconfig defaults.

✏️ Tip: You can customize this high-level summary in your review settings.

dougwithseismic and others added 12 commits December 15, 2025 21:27
- Replace rm -rf with rimraf in clean-js script for cross-platform compatibility
- Add comprehensive Windows Compatibility section to WASM setup docs
- Document which scripts work natively on Windows vs require WSL
- Remove HELP WANTED admonition (closes #80)
- Add missing help description in docs/scripts/help.js

Scripts now working natively on Windows:
- dev, dev:all, preview, build-js, clean-js
- lint, lint:fix, lint:style, format, format-js, format-wasm
- docs, help, release

WASM scripts still require WSL (Emscripten recommendation)
Replace Unix-specific Makefiles with CMake for full cross-platform
Windows, macOS, and Linux support:

- Add root CMakeLists.txt that auto-discovers WASM modules
- Add per-module CMakeLists.txt with Emscripten configuration
- Create cross-platform Node.js build script (scripts/build-wasm.js)
- Update npm scripts to use new CMake-based build
- Update documentation with CMake installation and usage instructions
- Add CMake build artifacts to .gitignore

WASM development now works natively on Windows without WSL.

Addresses feedback from PR #93 review.
- Add proper error handling to clean() with force: false
- Surface Emscripten check errors (not just ENOENT)
- Add try/catch to mkdirSync with helpful diagnostics
- Log error context (status, signal, message) in run()
- Validate CLI arguments and reject unknown ones
- Dynamically discover modules for clean operation
- Remove legacy Makefiles (replaced by CMake)

Addresses PR review feedback on error handling.
@coderabbitai

coderabbitai Bot commented Dec 20, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

Adds a containerized development environment and cross-platform CLI wrappers, replaces Makefile-based WASM builds with a CMake + Emscripten workflow driven by a Node build script, removes old Makefiles, and updates docs/config to reflect the new build and developer workflows.

Changes

Cohort / File(s) Change Summary
Docker & Devcontainer
Dockerfile.dev, docker-compose.yml, .devcontainer/entrypoint.sh, .dockerignore
Adds a development Dockerfile and compose service, installs/configures EMSDK and Node tooling, provides a devcontainer entrypoint (strict shell + optional EMSDK sourcing), file-watch polling, ports, mounts, and .dockerignore patterns.
CLI Wrappers (cross-OS)
img2num, img2num.ps1, img2num.bat
Adds Bash, PowerShell, and Batch wrappers to ensure/start the dev container, dispatch npm scripts inside it, provide interactive shells, logs, and lifecycle utilities (stop/restart/down/purge/destroy) with docs-mode messaging.
WASM: CMake Orchestration
src/wasm/CMakeLists.txt, src/wasm/modules/image/CMakeLists.txt, src/wasm/modules/*/CMakeLists.txt*
Introduces a root CMakeLists that enforces Emscripten/C++17 and auto-discovers modules; adds per-module CMake templates that set Emscripten flags, export names, build-type handling, and outputs to module build dirs.
WASM: Removed Makefiles
src/wasm/Makefile, src/wasm/modules/image/Makefile
Removes the root and module Makefiles and their build/debug/clean orchestration targets.
Build Orchestrator (Node)
scripts/build-wasm.js
Adds a cross-platform Node build script to validate args (--debug/--clean), discover modules, run emcmake cmake and cmake --build, and perform safe cleaning with diagnostics and error handling.
NPM & Tooling changes
package.json, docs/package.json, vite.config.js
Replaces make-based npm scripts to call scripts/build-wasm.js, uses rimraf for cleans (devDependency added), adjusts Docusaurus start/serve flags, and sets Vite host/port to 0.0.0.0:5173.
Config & Formatting
.gitignore, .editorconfig, README.md
Adds CMake build artifacts to .gitignore, extends .editorconfig for CMake/Bash/Batch/PowerShell and the img2num script, and updates README reminder text/date.
Documentation updates
docs/docs/... (multiple files)
Rewrites WASM and onboarding docs from Makefile to CMake: setup, add-module, workflow, architecture, module docs; restructures Getting Started into Docker vs Local tabbed flows and updates cross-references and examples.

Sequence Diagram(s)

sequenceDiagram
    participant Dev as Developer (CLI)
    participant Wrapper as img2num (Bash/PS)
    participant Compose as Docker Compose
    participant Container as Dev Container
    participant NPM as npm (in container)
    participant BuildJS as scripts/build-wasm.js
    participant CMake as CMake / Emscripten

    Dev->>Wrapper: img2num build-wasm [--debug]
    Wrapper->>Compose: ensure dev service running
    alt container not present
        Compose->>Container: create & start service
    else container stopped
        Compose->>Container: start service
    end
    Wrapper->>Container: docker compose exec npm run build-wasm
    Container->>NPM: npm run build-wasm
    NPM->>BuildJS: node scripts/build-wasm.js [--debug]
    BuildJS->>BuildJS: validate args, discover modules
    BuildJS->>CMake: emcmake cmake (configure)
    BuildJS->>CMake: cmake --build --parallel (per-module)
    CMake-->>BuildJS: build artifacts (index.js, index.wasm)
    BuildJS-->>NPM: exit status
    NPM-->>Wrapper: command result
    Wrapper-->>Dev: output/exit status
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Focus areas:
    • scripts/build-wasm.js: arg parsing, emcc detection, module discovery, cross-platform command execution and error messages
    • CMakeLists: Emscripten flags, EXPORT_NAME correctness, output paths and build-type handling
    • img2num / img2num.ps1: parity, container lifecycle edge cases, volume and ports correctness
    • Dockerfile.dev & docker-compose.yml: EMSDK install/activation steps and environment variables
    • package.json / docs integration and updated docs links

Poem

🐰 I hopped into Docker, nose a-gleam,
Swapped Make for CMake, a tidy new scheme,
Scripts in Bash and PowerShell, tidy and bright,
Emscripten hums through day and night,
Hop—build—docs—this rabbit cheers with delight!

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main changes: adding Docker setup (Dockerfile.dev, docker-compose.yml, entrypoint.sh), CMake build system for WASM, and cross-platform helper scripts (img2num variants, build-wasm.js).
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/docker-docker-compose/issue-127

📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 44819f7 and 9a24995.

📒 Files selected for processing (1)
  • docs/docs/index.md
🧰 Additional context used
🧠 Learnings (3)
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, do not create multiple markdown files at the repository root. The README.md at root should remain brief and point to the Docusaurus site.

Applied to files:

  • docs/docs/index.md
📚 Learning: 2025-12-20T20:11:28.389Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-20T20:11:28.389Z
Learning: In the Img2Num repository, all documentation should be properly organized in the docs/docs/ folder structure following the Docusaurus conventions, either as a dedicated category or integrated into existing categories like project-scripts.

Applied to files:

  • docs/docs/index.md
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, all documentation must be placed in the docs/docs/ folder following the Docusaurus structure, not at the repository root.

Applied to files:

  • docs/docs/index.md
🔇 Additional comments (1)
docs/docs/index.md (1)

22-22: ✅ Well-structured documentation update with prior issues resolved.

The changes successfully streamline the home page while addressing the concerns flagged in previous reviews:

  • Grammar ("something" vs. "an something") is now correct.
  • All links consistently use HTTPS.
  • The self-referential link issue (Examples/FAQ entries with ./ links) has been resolved by removing those entries.
  • Docusaurus admonition syntax (:::important block) is properly formed.
  • Issue template URLs are correctly parameterized and link to the right GitHub workflows.

The overall structure is clearer and more focused.

Also applies to: 26-27, 31-42


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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 8

🧹 Nitpick comments (4)
img2num.bat (1)

1-10: Minor: Redundant comments on lines 2 and 4.

The wrapper logic is correct—%~dp0 properly resolves the script directory, and -ExecutionPolicy Bypass ensures the PowerShell script can run regardless of the user's policy settings. Lines 2 and 4 have nearly identical comments; consider removing one.

Suggested cleanup
 @echo off
 REM img2num.bat - CMD wrapper for img2num.ps1 (PowerShell script)
 
-REM img2num.bat – Windows wrapper for img2num.ps1
-
 REM Get the directory of the batch file
 SET "SCRIPT_DIR=%~dp0"
img2num (1)

64-67: Consider deriving the image name dynamically.

The image name img2num-dev:latest is hardcoded. If the image name in docker-compose.yml changes, this would silently fail. Consider using docker compose images or a variable for consistency.

src/wasm/modules/image/CMakeLists.txt (1)

16-19: Consider explicitly listing source files instead of GLOB_RECURSE.

CMake's file(GLOB_RECURSE ...) won't detect newly added source files until the next explicit reconfiguration. For small modules this is manageable, but it can cause build confusion when contributors add files and the build silently ignores them.

If the module is expected to grow, consider listing sources explicitly or documenting the need to re-run cmake after adding files.

scripts/build-wasm.js (1)

100-111: Consider force: true for more robust cleanup.

Using force: false may fail on read-only files or locked files (e.g., if an editor has a file open on Windows). For build artifact cleanup, force: true is typically preferred.

🔎 Suggested change
-    rmSync(dir, { recursive: true, force: false });
+    rmSync(dir, { recursive: true, force: true });
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b53e123 and 9776dde.

⛔ Files ignored due to path filters (2)
  • docs/package-lock.json is excluded by !**/package-lock.json
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (20)
  • .devcontainer/entrypoint.sh (1 hunks)
  • .dockerignore (1 hunks)
  • .gitignore (1 hunks)
  • Dockerfile.dev (1 hunks)
  • docker-compose.yml (1 hunks)
  • docs/docs/reference/wasm/how-to-add-a-module.md (1 hunks)
  • docs/docs/reference/wasm/setup-and-dependencies.md (1 hunks)
  • docs/package.json (1 hunks)
  • docs/scripts/help.js (1 hunks)
  • img2num (1 hunks)
  • img2num.bat (1 hunks)
  • img2num.ps1 (1 hunks)
  • package.json (2 hunks)
  • scripts/build-wasm.js (1 hunks)
  • src/data/contributor-credits.json (1 hunks)
  • src/wasm/CMakeLists.txt (1 hunks)
  • src/wasm/Makefile (0 hunks)
  • src/wasm/modules/image/CMakeLists.txt (1 hunks)
  • src/wasm/modules/image/Makefile (0 hunks)
  • vite.config.js (1 hunks)
💤 Files with no reviewable changes (2)
  • src/wasm/modules/image/Makefile
  • src/wasm/Makefile
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, test documentation should be properly organized in the docs/docs/ folder structure, either as a dedicated testing category or integrated into existing categories like project-scripts.

Applied to files:

  • img2num
📚 Learning: 2025-12-17T21:35:30.135Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T21:35:30.135Z
Learning: In the Img2Num project, files that import React hooks must use the `.jsx` extension (not `.js`), as `npm run dev` fails otherwise. This is a build configuration requirement.

Applied to files:

  • docs/docs/reference/wasm/setup-and-dependencies.md
  • Dockerfile.dev
🪛 markdownlint-cli2 (0.18.1)
docs/docs/reference/wasm/how-to-add-a-module.md

12-12: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)

🔇 Additional comments (32)
src/data/contributor-credits.json (2)

23-36: The two new contributors have been verified through the repository's commit history. Doug Silkstone (dougwithseismic) has multiple commits in this repository, and Rashmi Joshi (Rashmijoshi18) has made at least one commit. The contribution count of 1 for Rashmijoshi18 and the user data (IDs, URLs) are accurate.

Consider automating the maintenance of this file by creating a script that fetches contributor data directly from the GitHub API to ensure accuracy and reduce manual update errors in future contributions.


2-15: Verify updated contribution counts against GitHub API data.

The contribution counts for Ryan-Millard (now 55) and dependabot[bot] (now 16) are correctly reflected in the file, but their accuracy against GitHub's actual contribution statistics should be confirmed via GitHub API or the repository's contributors graph.

docs/package.json (1)

8-8: LGTM!

The --host 0.0.0.0 binding enables the dev server to be accessible from outside the container, and --poll 1000 provides reliable file watching in Docker volume mounts where inotify events may not propagate. These are appropriate changes for containerized development.

Also applies to: 13-13

.gitignore (1)

30-34: LGTM!

The CMake build artifact patterns are correctly scoped to src/wasm/ and cover the standard files generated by CMake (cmake-build/, CMakeCache.txt, CMakeFiles/).

docs/scripts/help.js (1)

9-9: LGTM!

Good fix—adding the self-referential description for the help script ensures it doesn't display "No description" when listing available scripts.

.devcontainer/entrypoint.sh (1)

1-12: LGTM! Well-structured entrypoint script.

The entrypoint correctly implements strict error handling, conditionally sources the EMSDK environment, and properly replaces the shell process with the provided command using exec "$@".

.dockerignore (1)

1-8: LGTM! Appropriate Docker ignore patterns.

The ignore patterns effectively exclude build artifacts, dependencies, and metadata from the Docker build context, which improves build performance and reduces image size.

vite.config.js (1)

43-45: LGTM! Correctly configured for Docker development.

The server configuration properly binds to all network interfaces (0.0.0.0) and sets the port to 5173, which aligns with the Docker Compose port mapping and enables access to the Vite dev server from outside the container.

src/wasm/CMakeLists.txt (3)

7-20: LGTM! Well-structured CMake setup with proper Emscripten validation.

The CMake configuration appropriately requires version 3.16, enforces C++17, and includes a clear error message guiding users to build with Emscripten. This prevents common misconfiguration issues.


22-28: LGTM! Sensible build type defaults.

Defaulting to Release builds is appropriate for production use, and the status messages provide helpful feedback about the build configuration.


30-38: LGTM! Elegant module auto-discovery.

The automatic module discovery correctly identifies subdirectories with CMakeLists.txt and includes them in the build. The status messages provide useful feedback during configuration.

Dockerfile.dev (5)

9-20: LGTM! Appropriate build dependencies.

The installed packages include all necessary tools for building WASM modules with Emscripten and handling image processing. The cleanup of apt lists reduces the final image size.


22-31: LGTM! Proper EMSDK installation.

The EMSDK installation correctly clones, checks out a specific version for reproducibility, and updates the PATH. The single RUN command minimizes Docker layers.


35-42: LGTM! Proper container configuration.

The working directory, CHOKIDAR polling configuration for file watching, exposed ports, and default command are all correctly configured for the containerized development environment.


33-33: npm@11 is a valid and stable version—no action needed.

npm 11 was released on December 16, 2024 with the goal of improving security, reliability, and usability for JavaScript package management. The current latest stable release is v11.7.0. The Dockerfile instruction RUN npm install -g npm@11 will correctly install a supported version.


4-7: EMSDK version 4.0.10 is valid and available.

The specified version exists in the official emscripten-core/emsdk repository and is appropriate for use.

docker-compose.yml (2)

1-20: LGTM! Well-configured development service.

The Docker Compose service is properly configured with:

  • Appropriate volume mounts (project root + isolated node_modules)
  • Correct port mappings for Vite and Docusaurus dev servers
  • CHOKIDAR polling for reliable file watching in containers
  • Interactive terminal support

22-24: LGTM! Named volumes for dependency isolation.

The named volumes for node_modules prevent conflicts between host and container dependencies, which is a best practice for Node.js development in Docker.

package.json (3)

17-18: LGTM! Cross-platform WASM build scripts.

The migration from make to Node.js-based build scripts enables cross-platform development, particularly for Windows users who don't have Make installed by default.


20-21: LGTM! Cross-platform cleanup scripts.

The use of rimraf for clean-js and the Node.js script for clean-wasm ensure these commands work consistently across Windows, macOS, and Linux.


54-54: rimraf@6.1.2 is available and appropriate for the project.

The latest version of rimraf is 6.1.2, last published a month ago. The caret version constraint (^6.1.2) allows patch and minor updates within the v6 series, which is an appropriate approach for a widely-maintained package. The package has a healthy maintenance status with no known vulnerabilities.

docs/docs/reference/wasm/how-to-add-a-module.md (3)

9-20: LGTM! Clear CMake-based module instructions.

The updated instructions accurately reflect the new CMake-based workflow and provide clear guidance for adding new WASM modules.


24-94: LGTM! Comprehensive and well-documented CMake template.

The CMakeLists.txt template provides excellent guidance with:

  • Automatic module naming from directory
  • Appropriate Emscripten flags for web environments
  • Reasonable memory settings with clear comments indicating they should be adjusted per module
  • Separate Debug and Release configurations

This will significantly help developers add new WASM modules.


96-121: LGTM! Clear directory structure and build instructions.

The directory structure example and build commands clearly demonstrate how to use the new CMake-based workflow across all platforms.

src/wasm/modules/image/CMakeLists.txt (1)

33-48: LGTM!

The Emscripten configuration is well-structured with appropriate modularization flags, ES6 export, and memory growth settings. The dynamic export name generation (create${CAP_MODULE_NAME}Module) is a clean approach for module discovery.

docs/docs/reference/wasm/setup-and-dependencies.md (2)

41-92: LGTM!

The OS-specific tabs for CMake and Emscripten installation are well-organized and provide clear instructions for Windows, Linux, and macOS users. The separation of environment setup commands per platform is helpful.


132-148: Clear architecture documentation.

The directory structure diagram effectively communicates the CMake-based build system layout and the auto-discovery mechanism for modules.

scripts/build-wasm.js (5)

22-31: LGTM!

Clean argument validation with helpful error messages listing valid options.


41-62: LGTM!

Good use of execFileSync (no shell injection risk) with proper error handling including exit codes and signals.


67-88: LGTM!

Good platform-aware Emscripten detection with appropriate handling for ENOENT vs other errors.


169-219: LGTM!

The build function is well-structured with clear phases (Emscripten check, directory creation, CMake configure, CMake build). The error messages with installation instructions are helpful for onboarding.


221-229: LGTM!

The main execution logic correctly handles the three cases: clean-only, clean-then-build, and build-only.

Comment thread docs/docs/reference/wasm/how-to-add-a-module.md
Comment thread docs/docs/reference/wasm/setup-and-dependencies.md
Comment thread img2num
Comment thread img2num Outdated
Comment thread img2num.ps1 Outdated
Comment thread img2num.ps1
Comment thread scripts/build-wasm.js
Comment thread src/wasm/modules/image/CMakeLists.txt

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

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 (2)
img2num (2)

29-29: Same clean command conflict as in previous review.

Line 29 includes clean in the npm scripts pattern, but line 64 also handles clean|destroy for Docker maintenance. Since Bash case matches the first pattern, clean will always run npm run clean rather than docker compose down --volumes.

Based on the usage text (line 107 lists clean under "Docker Maintenance"), remove clean from the npm scripts pattern on line 29.

Suggested fix
-  dev|dev:all|dev:debug|dev:all:debug|build|build-js|build-wasm|build-wasm:debug|preview|docs|lint|lint:fix|lint:style|format|format-js|format-wasm|clean|clean-js|clean-wasm|help)
+  dev|dev:all|dev:debug|dev:all:debug|build|build-js|build-wasm|build-wasm:debug|preview|docs|lint|lint:fix|lint:style|format|format-js|format-wasm|clean-js|clean-wasm|help)

73-78: Same exit code and UX issues as in previous review.

Two issues persist:

  1. Exit code 1 is returned even for explicit -h/--help requests.
  2. When no arguments are passed (MODE is empty), the script shows "Unknown command used." which is misleading.
Suggested fix
   -h|--help|*)
     echo
-    if [ "$MODE" != "-h" ] && [ "$MODE" != "--help" ]; then
+    if [ "$MODE" != "-h" ] && [ "$MODE" != "--help" ] && [ -n "$MODE" ]; then
       echo "Unknown command used."
       echo
     fi
 
     cat <<EOF
 ...
 EOF
-    exit 1
+    # Exit 0 for help requests, 1 for unknown commands
+    if [ "$MODE" = "-h" ] || [ "$MODE" = "--help" ] || [ -z "$MODE" ]; then
+      exit 0
+    else
+      exit 1
+    fi
     ;;

Also applies to: 111-111

🧹 Nitpick comments (1)
img2num (1)

42-44: Consider removing -e flag from echo.

The -e flag interprets backslash escapes, but the color variables use tput output (terminal control sequences), not backslash escapes. Plain echo suffices here.

Suggested change
-      echo -e "${YELLOW}[INFO] Docusaurus is running inside the container, listening on all interfaces (0.0.0.0).${RESET}"
-      echo -e "${YELLOW}[INFO] You cannot use the 0.0.0.0 link directly.${RESET}"
-      echo -e "${YELLOW}[INFO] Access the site in your browser via: ${MAGENTA}http://localhost:3000/Img2Num/info/${RESET}"
+      echo "${YELLOW}[INFO] Docusaurus is running inside the container, listening on all interfaces (0.0.0.0).${RESET}"
+      echo "${YELLOW}[INFO] You cannot use the 0.0.0.0 link directly.${RESET}"
+      echo "${YELLOW}[INFO] Access the site in your browser via: ${MAGENTA}http://localhost:3000/Img2Num/info/${RESET}"
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9776dde and 98544a5.

📒 Files selected for processing (1)
  • img2num (1 hunks)
🔇 Additional comments (6)
img2num (6)

1-6: LGTM! Solid initialization.

The shebang, error handling with set -e, and argument capture with safe shift are all correct.


7-14: LGTM!

The container check and startup logic is correct.


50-58: LGTM!

Both npm passthrough and shell access commands are correctly implemented.


60-63: LGTM!

Docker maintenance commands are correctly implemented with proper conditional logic for destroy.

Also applies to: 66-67


69-70: LGTM!

Logs command correctly tails container logs.


16-24: The hardcoded container name filter on line 19 actually works correctly due to Docker's partial substring matching behavior for the docker ps --filter name= option. The filter img2num-dev will match auto-generated names like img2num-dev-1 regardless of whether Docker Compose v1 (underscores) or v2 (dashes) naming conventions are used, as long as the hardcoded prefix is present. The concern about a mismatch preventing the exec branch from executing is invalid.

Comment thread img2num
@Ryan-Millard Ryan-Millard changed the title Feat: Cross-platform support Feat: Add Docker setup, CMake and cross-platform build scripts Dec 20, 2025

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

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 (2)
Dockerfile.dev (2)

23-28: Consider optimizing the EMSDK clone.

The current approach uses --depth 1 for a shallow clone but then runs git fetch --tags, which negates the shallow clone benefit by fetching additional git objects.

🔎 Proposed optimization
-RUN git clone --depth 1 https://github.com/emscripten-core/emsdk.git $EMSDK_DIR \
-&& cd $EMSDK_DIR \
-&& git fetch --tags \
-&& git checkout $EMSDK_VERSION \
+RUN git clone --depth 1 --branch $EMSDK_VERSION https://github.com/emscripten-core/emsdk.git $EMSDK_DIR \
+&& cd $EMSDK_DIR \
 && ./emsdk install $EMSDK_VERSION \
 && ./emsdk activate $EMSDK_VERSION

This clones only the specific tag needed, reducing both clone time and image layer size.


4-4: Node.js 22 is in Maintenance LTS; consider upgrading to Node.js 24 for longer Active LTS support.

Node.js 22.x moved to Maintenance LTS on October 21, 2025 and will reach end-of-life on April 30, 2027, while Node.js 24.x is in Active LTS and supported through October 20, 2026. For a development environment with sustained use, Active LTS offers guaranteed support timeline, critical security updates, and enhanced functionality. The node:22-bullseye image is secure and functional, but node:24-bullseye would provide extended Active LTS coverage.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 98544a5 and 1a65ab6.

📒 Files selected for processing (1)
  • Dockerfile.dev (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-12-17T21:35:30.135Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T21:35:30.135Z
Learning: In the Img2Num project, files that import React hooks must use the `.jsx` extension (not `.js`), as `npm run dev` fails otherwise. This is a build configuration requirement.

Applied to files:

  • Dockerfile.dev
🔇 Additional comments (3)
Dockerfile.dev (3)

9-20: LGTM!

The system dependencies are appropriate for building WASM modules with Emscripten. Good use of --no-install-recommends and cleanup of apt lists to keep the image size down.


35-42: LGTM!

The workdir, Chokidar polling configuration (necessary for file watching in Docker on some host systems), port exposure (5173 for Vite, 3000 for docs), and bash default command are all appropriate for a development container.


33-33: No changes needed — npm version 11 is available and appropriate.

npm version 11.7.0 is the latest stable release, confirming that npm version 11 was released on December 16, 2024 and is actively maintained. Installing npm@11 globally in your Dockerfile.dev is valid and appropriate.

Comment thread Dockerfile.dev

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
docs/docs/reference/wasm/development-workflow.md (1)

22-94: LGTM — comprehensive CMakeLists.txt template.

The template is well-structured and covers all essential aspects: module name extraction, capitalization for export naming, source discovery, Emscripten flags (MODULARIZE, EXPORT_ES6, memory, export naming), build-type branching (Debug vs. Release), and output configuration. The comments are clear and guide users through the setup.

Optional note for future enhancement: The template uses file(GLOB_RECURSE) for source discovery (line 39–41), which is a common simplification for templates but is generally discouraged in production CMake builds (non-deterministic ordering; doesn't detect new files without reconfiguration). For an introductory template, this is acceptable, but advanced users may want to enumerate sources explicitly for reproducibility.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1a65ab6 and c83644c.

📒 Files selected for processing (10)
  • .editorconfig (1 hunks)
  • README.md (2 hunks)
  • docs/docs/guidelines/CONTRIBUTING.md (1 hunks)
  • docs/docs/guidelines/coding-style.md (1 hunks)
  • docs/docs/project-scripts/build.md (2 hunks)
  • docs/docs/project-scripts/clean.md (1 hunks)
  • docs/docs/project-scripts/overview.md (1 hunks)
  • docs/docs/reference/wasm/development-workflow.md (1 hunks)
  • docs/docs/reference/wasm/modules/image/overview.md (1 hunks)
  • docs/docs/reference/wasm/overview.md (2 hunks)
✅ Files skipped from review due to trivial changes (1)
  • docs/docs/project-scripts/build.md
🧰 Additional context used
🧠 Learnings (5)
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, do not create multiple markdown files at the repository root. The README.md at root should remain brief and point to the Docusaurus site.

Applied to files:

  • docs/docs/guidelines/CONTRIBUTING.md
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, avoid creating strangely-named markdown files (like COMPREHENSIVE_TEST_REPORT.md, DELIVERABLES.md, etc.) at the root level.

Applied to files:

  • docs/docs/guidelines/CONTRIBUTING.md
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, all documentation must be placed in the docs/docs/ folder following the Docusaurus structure, not at the repository root.

Applied to files:

  • docs/docs/guidelines/CONTRIBUTING.md
📚 Learning: 2025-12-17T21:35:30.135Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T21:35:30.135Z
Learning: In the Img2Num project, files that import React hooks must use the `.jsx` extension (not `.js`), as `npm run dev` fails otherwise. This is a build configuration requirement.

Applied to files:

  • docs/docs/guidelines/CONTRIBUTING.md
  • docs/docs/reference/wasm/overview.md
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, test documentation should be properly organized in the docs/docs/ folder structure, either as a dedicated testing category or integrated into existing categories like project-scripts.

Applied to files:

  • docs/docs/guidelines/CONTRIBUTING.md
🔇 Additional comments (11)
.editorconfig (1)

28-46: CMake configuration additions are well-structured and consistent.

The new sections for CMakeLists.txt and *.cmake files follow the established pattern in the file and maintain consistency with related language-specific blocks (particularly the C++ section). All formatting rules—indent_style, indent_size, charset, end_of_line, trim_trailing_whitespace, insert_final_newline, and max_line_length—are appropriately aligned with the project's conventions and the PR objective of migrating to CMake-based WASM builds.

README.md (2)

1-8: Clarify the TODO comment and its relationship to PR #139.

The TODO references PR #93's merge deadline, but per the PR objectives, PR #139 is replacing PR #93. If PR #139 merges instead of (or independently of) PR #93, this TODO logic may need adjustment. Additionally, the CAUTION block still references PR #93 and its breaking changes—consider whether this notice remains accurate if PR #139 is the primary change vehicle.

Could you clarify:

  1. Will PR #93 be merged, or is PR #139 the definitive replacement?
  2. Should the TODO deadline and/or the CAUTION block be updated to reflect PR #139's scope?

55-55: Verify Make prerequisite given CMake migration.

Line 55 now states "CMake for WASM builds" (updated from Makefile). However, Line 70 still lists Make as a required tool. Given the migration to CMake:

  1. Is Make still required, or does CMake replace it?
  2. Should the Prerequisites section mention CMake alongside or instead of Make?

The PR objectives mention "Preserve existing Makefile architecture," which suggests both may coexist, but this should be clarified in the Prerequisites for developer onboarding.

Also applies to: 70-70

docs/docs/guidelines/CONTRIBUTING.md (1)

35-35: LGTM — consistent Makefile → CMakeLists.txt migration.

The link update correctly reflects the shift from Makefile-based WASM orchestration to CMake-based orchestration.

docs/docs/guidelines/coding-style.md (1)

9-9: LGTM — simplified indentation rule.

Consolidating to a uniform 2-space indentation is cleaner and easier to enforce across the codebase.

docs/docs/project-scripts/overview.md (1)

12-17: LGTM — CMakeLists.txt reference + new script categories.

The update correctly reflects the CMake-based build orchestration, and the addition of Linting and Documentation script categories aligns with the PR's expanded script organization.

docs/docs/reference/wasm/modules/image/overview.md (1)

14-14: LGTM — module structure reflects CMakeLists.txt.

The directory structure correctly shows CMakeLists.txt in place of Makefile, aligning with the per-module CMake build configuration.

docs/docs/project-scripts/clean.md (1)

22-22: LGTM — cross-platform clean scripts.

The shift from rm -rf to rimraf enables Windows compatibility, and delegation to scripts/build-wasm.js centralizes the CMake-based build cleanup. The documentation clearly explains the flow and updated CMakeLists.txt reference.

Also applies to: 30-35

docs/docs/reference/wasm/overview.md (1)

31-33: LGTM — CMakeLists.txt references updated.

The documentation correctly describes the root CMakeLists.txt orchestration and delegation pattern, reflecting the Makefile→CMake migration.

docs/docs/reference/wasm/development-workflow.md (2)

17-20: LGTM — root CMakeLists.txt contract clearly documented.

The new contract description concisely explains that the root CMakeLists.txt implements build and debug targets, with submodules supporting at least these targets.


96-101: LGTM — helpful guidance note for template customization.

The note provides actionable guidance: code organization (include/src/), exported function usage (ccall/cwrap), memory configuration, and where to place module-specific options. This helps users adapt the template to their needs.

…this usage

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c83644c and eb8584f.

📒 Files selected for processing (1)
  • docs/docs/reference/wasm/setup-and-dependencies.md (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-12-17T21:35:30.135Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T21:35:30.135Z
Learning: In the Img2Num project, files that import React hooks must use the `.jsx` extension (not `.js`), as `npm run dev` fails otherwise. This is a build configuration requirement.

Applied to files:

  • docs/docs/reference/wasm/setup-and-dependencies.md
🪛 markdownlint-cli2 (0.18.1)
docs/docs/reference/wasm/setup-and-dependencies.md

12-12: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


136-136: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🔇 Additional comments (2)
docs/docs/reference/wasm/setup-and-dependencies.md (2)

26-26: ✓ Node.js version requirement is correctly updated.

Line 26 now specifies Node.js v20.11+ (or v22 LTS), which correctly aligns with the use of import.meta.dirname in scripts/build-wasm.js (introduced in Node.js 20.11.0). This addresses the prior review concern about version compatibility.


22-35: Verify cross-platform WASM support claim against PR objectives.

Line 24 claims WASM development "works natively on all platforms including Windows," but the PR objectives state that WASM-related scripts (build-wasm, build-wasm:debug, clean-wasm, build, clean, dev:debug, dev:all:debug) require WSL per Emscripten. This appears to be a positive outcome—if CMake + Emscripten now support true Windows natives—but deserves verification to ensure the documentation accurately reflects the actual capability and doesn't overstate Windows native support when WSL is still required for some workflows.

Can you confirm whether WASM scripts now run truly natively on Windows without WSL, or if WSL is still needed for certain workflows? If the latter, the doc should clarify which scripts require WSL (if any) on Windows.

Comment thread docs/docs/reference/wasm/setup-and-dependencies.md Outdated
Comment thread docs/docs/reference/wasm/setup-and-dependencies.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
docs/docs/reference/wasm/setup-and-dependencies.md (1)

39-103: Cross-platform setup instructions are well-presented.

The use of Tabs component for CMake installation (lines 41–57) and Emscripten environment setup (lines 73–92) provides clear OS-specific guidance for Windows (CMD and PowerShell), Linux, and macOS. All code blocks have proper language identifiers, including the cmd and PowerShell variants on Windows. This effectively implements the Windows Compatibility requirement from the PR objectives.

The Step 3 verification commands (lines 100–103) are shown in bash only, but since cmake --version and emcc --version are universally applicable (just run in the platform's shell), this is acceptable. For maximum consistency with the other steps, consider wrapping these in a Tabs component as well, though it is not required.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between eb8584f and 09695ca.

📒 Files selected for processing (3)
  • docs/docs/reference/wasm/setup-and-dependencies.md (1 hunks)
  • img2num (1 hunks)
  • img2num.ps1 (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • img2num
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-12-17T21:35:30.135Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T21:35:30.135Z
Learning: In the Img2Num project, files that import React hooks must use the `.jsx` extension (not `.js`), as `npm run dev` fails otherwise. This is a build configuration requirement.

Applied to files:

  • docs/docs/reference/wasm/setup-and-dependencies.md
🔇 Additional comments (5)
docs/docs/reference/wasm/setup-and-dependencies.md (5)

1-5: Frontmatter ID typo fixed correctly.

The id change from wasm-setup-depencenciess to wasm-setup-dependencies resolves the typo mentioned in the PR objectives.


10-35: Heading hierarchy and cross-platform structure are correct.

The prerequisites section now properly uses h2 for main headings (## Prerequisites at line 10) with h3 subsections (### Frontend-Only Development and ### Full Development). This addresses the MD001 violation flagged in the previous review. The split between frontend-only and full (WASM-inclusive) development is clear and helpful for users with different needs.


26-26: Node.js requirement correctly updated.

The requirement now specifies Node.js v20.11+ or v22 LTS, which aligns with the use of import.meta.dirname in scripts/build-wasm.js. This resolves the previous review comment about version compatibility.


105-125: Build system integration explanation is clear.

Lines 107–125 effectively explain how the npm scripts integrate with the new CMake-based build system via scripts/build-wasm.js. The documentation correctly describes the build pipeline steps and output location, providing users with a mental model of what happens when they run npm run build-wasm.


132-148: Build System Architecture diagram is helpful and language-specified correctly.

The ASCII directory tree at lines 136–146 uses the txt language identifier (addressing the earlier MD040 linting issue) and clearly shows the new CMake-based structure (CMakeLists.txt, module directories, build/ outputs) versus the previous Makefile approach. The reference to PR #93 provides historical context.

Comment thread img2num.ps1 Outdated
Comment thread img2num.ps1 Outdated
@Ryan-Millard

Copy link
Copy Markdown
Owner Author

@CodeRabbit full review

@coderabbitai

coderabbitai Bot commented Dec 21, 2025

Copy link
Copy Markdown
Contributor
✅ Actions performed

Full review triggered.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (7)
docs/docs/index.md (1)

43-43: Use HTTPS for consistency and security.

The GitHub link uses http:// while other links in the repository use https://. Use HTTPS consistently.

🔎 Proposed fix
-- [Blank Issue](https://github.com/Ryan-Millard/Img2Num/issues/new)
+- [Blank Issue](https://github.com/Ryan-Millard/Img2Num/issues/new)
img2num.bat (1)

2-8: Simplify comments to reduce redundancy.

The batch file contains multiple REM comments that describe straightforward operations. Consider keeping only the file-level comment (line 2) and removing the overly descriptive comments on lines 4 and 7, as the code is self-explanatory.

🔎 Proposed simplification
 @echo off
 REM img2num.bat - CMD wrapper for img2num.ps1 (PowerShell script)
 
-REM Get the directory of the batch file
 SET "SCRIPT_DIR=%~dp0"
 
-REM Call the PowerShell script with all arguments using Windows PowerShell
 powershell -ExecutionPolicy Bypass -File "%SCRIPT_DIR%img2num.ps1" %*
Dockerfile.dev (1)

6-6: Consider updating EMSDK to a newer stable version.

EMSDK version 4.0.10 may be outdated compared to the latest stable releases in the 4.0.x series. Using a more recent version ensures access to bug fixes, security improvements, and the latest WebAssembly features.

What is the latest stable version of Emscripten EMSDK in the 4.0.x series?
docs/docs/reference/wasm/how-to-add-a-module.md (1)

22-22: Fix heading level to follow Markdown hierarchy.

The heading should be level 2 (##) rather than level 1 (#) to maintain proper heading hierarchy.

🔎 Proposed fix
-# Minimal module CMakeLists.txt (copy/paste)
+## Minimal module CMakeLists.txt (copy/paste)
src/wasm/modules/image/CMakeLists.txt (1)

52-56: Replace deprecated -g4 flag with -g or -gsource-map.

The -g4 flag is deprecated in recent Emscripten versions. Use -g (equivalent to -g3, preserves DWARF for interactive debugging) or -gsource-map if you specifically need source maps for broader browser compatibility.

🔎 Proposed fix
 if(CMAKE_BUILD_TYPE STREQUAL "Debug")
-    target_compile_options(${MODULE_NAME}_wasm PRIVATE -O0 -g4)
+    target_compile_options(${MODULE_NAME}_wasm PRIVATE -O0 -g)
     target_link_options(${MODULE_NAME}_wasm PRIVATE
         "SHELL:-s ASSERTIONS=2"
-        -g4
+        -g
     )
docs/docs/reference/wasm/setup-and-dependencies.md (2)

39-41: Document CMake reconfiguration requirement for GLOB_RECURSE.

Using file(GLOB_RECURSE ...) means CMake won't automatically detect newly added source files—developers must manually rerun cmake (or delete cmake-build/) after adding new .cpp files. Consider either explicitly listing sources or adding a note in the template warning developers about this limitation.

📝 Suggested documentation addition

Add a warning comment in the template:

 # Collect source files (recursively)
+# NOTE: CMake will not auto-detect new .cpp files added after initial
+# configuration. Re-run cmake or delete cmake-build/ to pick up new files.
 file(GLOB_RECURSE SRC_FILES
     "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp"
 )

Or reference it in the note section at lines 96-101.


100-103: Use force: true in rmSync for better Windows compatibility.

Setting force: false means rmSync will throw on permission errors or read-only files, which are more common on Windows. Using force: true makes cleanup more robust and prevents unnecessary build failures due to locked or read-only artifacts.

🔎 Suggested fix
   try {
-    rmSync(dir, { recursive: true, force: false });
+    rmSync(dir, { recursive: true, force: true });
     console.log(`  Removed: ${dir}`);
🧹 Nitpick comments (5)
src/data/contributor-credits.json (1)

23-36: New contributor entries look good.

The JSON structure is valid and the new contributor data is properly formatted with all required fields.

If this file is manually maintained, would you like help generating a script to automatically fetch and update contributor data from the GitHub API? This would reduce the risk of manual entry errors and keep the data synchronized.

src/wasm/CMakeLists.txt (1)

31-38: Consider the limitation of file(GLOB ...) for module discovery.

Using file(GLOB ...) for module auto-discovery is convenient, but CMake won't automatically detect newly added module directories until you manually reconfigure (rerun cmake). If a developer creates a new module with a CMakeLists.txt, the build system won't pick it up until reconfiguration.

Consider one of these approaches:

  • Option 1 (recommended for CHILL review): Document this limitation in a comment above the glob, noting that developers must rerun cmake after adding new modules.
  • Option 2: Maintain an explicit list of modules (e.g., set(MODULES image ...)) for more predictable builds at the cost of manual updates.
🔎 Example documentation comment
+# Note: file(GLOB) does not trigger automatic reconfiguration.
+# After adding a new module directory, rerun: emcmake cmake ..
 # Auto-discover all modules with CMakeLists.txt
 file(GLOB MODULE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/modules/*")
docs/docs/reference/wasm/how-to-add-a-module.md (1)

39-41: Consider explicitly listing source files instead of using GLOB_RECURSE.

Using file(GLOB_RECURSE ...) means CMake won't detect newly added source files until you manually rerun cmake. For better build reliability, either explicitly list source files or document that developers must reconfigure CMake when adding new .cpp files to the module.

💡 Alternative approaches

Option 1: Explicit file list

set(SRC_FILES
    "${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp"
    "${CMAKE_CURRENT_SOURCE_DIR}/src/utils.cpp"
    # Add new files here
)

Option 2: Keep GLOB but add documentation

# Collect source files
# Note: If you add new .cpp files, you must rerun cmake to detect them
file(GLOB_RECURSE SRC_FILES
    "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp"
)
src/wasm/modules/image/CMakeLists.txt (1)

17-19: Avoid file(GLOB_RECURSE) for source file collection.

CMake won't detect newly added source files until you manually reconfigure. This means adding a new .cpp file to the src/ directory won't trigger a rebuild or show up in the build until cmake is rerun. For more reliable builds, explicitly list source files or document the reconfiguration requirement.

💡 Recommended alternatives

Option 1: Explicit source list (preferred)

# Collect source files
set(SRC_FILES
    "${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp"
    "${CMAKE_CURRENT_SOURCE_DIR}/src/color.cpp"
    # Add new source files here
)

Option 2: Keep GLOB with clear documentation

# Collect source files
# IMPORTANT: Adding new .cpp files requires running cmake again to detect them
file(GLOB_RECURSE SRC_FILES
    "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp"
)
docs/docs/reference/wasm/setup-and-dependencies.md (1)

76-84: Improve UX for invocation without arguments.

When users run ./img2num with no arguments (MODE is empty), they see "Unknown command used." before the help text and the script exits with code 1. This is unfriendly—users who simply want to see available commands shouldn't get an error message.

🔎 Suggested fix
   -h|--help|*)
     EXIT_CODE=0
     echo
-    if [ "$MODE" != "-h" ] && [ "$MODE" != "--help" ]; then
+    if [ "$MODE" != "-h" ] && [ "$MODE" != "--help" ] && [ -n "$MODE" ]; then
       EXIT_CODE=1
       echo "Unknown command used."
       echo
     fi

This way:

  • ./img2num (empty) → shows help, exits 0
  • ./img2num --help → shows help, exits 0
  • ./img2num badcommand → shows error + help, exits 1
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between de9452f and 002802b.

⛔ Files ignored due to path filters (7)
  • docs/docs/introduction/img/docker-desktop-homepage.jpg is excluded by !**/*.jpg
  • docs/docs/introduction/img/docker-desktop-resources-button-location.jpg is excluded by !**/*.jpg
  • docs/docs/introduction/img/docker-desktop-settings-button-location.jpg is excluded by !**/*.jpg
  • docs/docs/introduction/img/docker-desktop-wsl-integration-button-location.jpg is excluded by !**/*.jpg
  • docs/docs/introduction/img/docker-desktop-wsl-integration-setup.jpg is excluded by !**/*.jpg
  • docs/package-lock.json is excluded by !**/package-lock.json
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (33)
  • .devcontainer/entrypoint.sh (1 hunks)
  • .dockerignore (1 hunks)
  • .editorconfig (2 hunks)
  • .gitignore (1 hunks)
  • Dockerfile.dev (1 hunks)
  • README.md (2 hunks)
  • docker-compose.yml (1 hunks)
  • docs/docs/guidelines/CONTRIBUTING.md (1 hunks)
  • docs/docs/guidelines/coding-style.md (1 hunks)
  • docs/docs/index.md (2 hunks)
  • docs/docs/introduction/getting-started.md (4 hunks)
  • docs/docs/introduction/usage.md (0 hunks)
  • docs/docs/project-scripts/build.md (2 hunks)
  • docs/docs/project-scripts/clean.md (1 hunks)
  • docs/docs/project-scripts/overview.md (1 hunks)
  • docs/docs/reference/wasm/development-workflow.md (1 hunks)
  • docs/docs/reference/wasm/how-to-add-a-module.md (1 hunks)
  • docs/docs/reference/wasm/modules/image/overview.md (1 hunks)
  • docs/docs/reference/wasm/overview.md (2 hunks)
  • docs/docs/reference/wasm/setup-and-dependencies.md (1 hunks)
  • docs/package.json (1 hunks)
  • docs/scripts/help.js (1 hunks)
  • img2num (1 hunks)
  • img2num.bat (1 hunks)
  • img2num.ps1 (1 hunks)
  • package.json (2 hunks)
  • scripts/build-wasm.js (1 hunks)
  • src/data/contributor-credits.json (1 hunks)
  • src/wasm/CMakeLists.txt (1 hunks)
  • src/wasm/Makefile (0 hunks)
  • src/wasm/modules/image/CMakeLists.txt (1 hunks)
  • src/wasm/modules/image/Makefile (0 hunks)
  • vite.config.js (1 hunks)
💤 Files with no reviewable changes (3)
  • src/wasm/Makefile
  • src/wasm/modules/image/Makefile
  • docs/docs/introduction/usage.md
🧰 Additional context used
🧠 Learnings (5)
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, do not create multiple markdown files at the repository root. The README.md at root should remain brief and point to the Docusaurus site.

Applied to files:

  • docs/docs/index.md
  • docs/docs/guidelines/CONTRIBUTING.md
📚 Learning: 2025-12-20T20:11:28.389Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-20T20:11:28.389Z
Learning: In the Img2Num repository, all documentation should be properly organized in the docs/docs/ folder structure following the Docusaurus conventions, either as a dedicated category or integrated into existing categories like project-scripts.

Applied to files:

  • docs/docs/index.md
  • img2num
  • docs/docs/guidelines/CONTRIBUTING.md
  • docs/docs/introduction/getting-started.md
  • docs/docs/reference/wasm/overview.md
  • img2num.ps1
  • docs/docs/project-scripts/overview.md
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, all documentation must be placed in the docs/docs/ folder following the Docusaurus structure, not at the repository root.

Applied to files:

  • docs/docs/index.md
  • docs/docs/guidelines/CONTRIBUTING.md
  • docs/docs/introduction/getting-started.md
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, avoid creating strangely-named markdown files (like COMPREHENSIVE_TEST_REPORT.md, DELIVERABLES.md, etc.) at the root level.

Applied to files:

  • docs/docs/index.md
  • docs/docs/guidelines/CONTRIBUTING.md
📚 Learning: 2025-12-17T21:35:30.135Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T21:35:30.135Z
Learning: In the Img2Num project, files that import React hooks must use the `.jsx` extension (not `.js`), as `npm run dev` fails otherwise. This is a build configuration requirement.

Applied to files:

  • Dockerfile.dev
  • docs/docs/guidelines/CONTRIBUTING.md
  • docs/docs/reference/wasm/setup-and-dependencies.md
  • docs/docs/reference/wasm/overview.md
🔇 Additional comments (30)
docs/docs/guidelines/coding-style.md (1)

1-100: Coding style guidelines appropriately simplified.

The removal of the Makefile-specific exception from indentation rules and deletion of the Makefiles section aligns well with the PR's broader architectural shift toward CMake-based builds. The indentation rule is now uniform across all supported languages/file types, which improves clarity and matches the .editorconfig reference on line 8.

src/data/contributor-credits.json (1)

7-7: Verify the accuracy of updated contribution counts.

Please confirm that the contribution count increases for Ryan-Millard (+6, from 49→55) and dependabot[bot] (+2, from 14→16) reflect actual commit/PR activity in the repository.

Also applies to: 14-14

docs/package.json (1)

8-8: LGTM! Docker-friendly server configuration.

Binding to 0.0.0.0 allows the Docusaurus dev server to be accessible from outside the Docker container, and the --poll 1000 flag ensures file watching works reliably in containerized and WSL environments where native file system events may not propagate correctly.

Also applies to: 13-13

.dockerignore (1)

1-8: LGTM! Standard Docker ignore patterns.

The ignore patterns appropriately exclude build artifacts, dependencies, and metadata to reduce Docker build context size and improve build performance.

.gitignore (1)

31-34: LGTM! Appropriate CMake artifact ignores.

The new ignore patterns correctly exclude CMake-generated build artifacts, aligning with the repository's shift from Makefile-based to CMake-based WASM workflows.

docs/scripts/help.js (1)

9-9: LGTM! Helpful self-documenting entry.

Adding the description for the help script itself improves discoverability and completes the help documentation.

.editorconfig (1)

28-46: LGTM! Comprehensive cross-platform editor configuration.

The new CMake and shell script blocks follow EditorConfig best practices with:

  • Appropriate line endings (LF for Unix-based, CRLF for Windows scripts)
  • Consistent formatting rules across all file types
  • Proper character encoding and whitespace handling

Also applies to: 149-192

docs/docs/index.md (1)

22-22: LGTM! Improved documentation structure.

The simplified Getting Started link and the new issue reporting guidance with template links improve the onboarding experience and make it easier for contributors to report issues.

Also applies to: 33-35, 37-42

docs/docs/introduction/getting-started.md (2)

10-14: LGTM! Comprehensive Docker-first onboarding flow.

The new tabbed structure effectively guides users through Docker installation across different operating systems with clear, actionable steps. The tip recommending Docker as the preferred route helps users make informed decisions about their setup path.

Also applies to: 22-29, 34-163


253-376: Complex but functional tabbed dependency and runtime sections.

The multi-level nested tabs provide comprehensive coverage of different installation routes (Docker/Local), operating systems, and shell environments. While the structure is complex, it serves the goal of platform-agnostic development well.

Based on learnings, all documentation is properly organized in docs/docs/ following Docusaurus conventions.

Also applies to: 383-518

img2num.ps1 (3)

11-36: LGTM! Well-structured container orchestration functions.

The Ensure-Container and Run-InContainer functions properly handle container lifecycle management and command execution, checking for both existence and running state before executing commands.


54-67: LGTM! User-friendly docs command with helpful output.

The color-capable guidance for the docs command helpfully explains the container networking behavior and provides the correct localhost URL, improving the developer experience when working with containerized Docusaurus.


101-142: LGTM! Comprehensive and well-organized help documentation.

The usage message clearly documents all available commands with appropriate grouping and helpful descriptions, making the tool easy to discover and use.

docs/docs/guidelines/CONTRIBUTING.md (1)

35-35: LGTM!

The documentation update correctly reflects the migration from Makefile to CMake-based orchestration for WASM builds.

.devcontainer/entrypoint.sh (1)

4-7: Verify EMSDK_ROOT is always defined in the container.

With set -u enabled (line 2), the script will fail if EMSDK_ROOT is unset when evaluating the condition [ -f "${EMSDK_ROOT}/emsdk_env.sh" ]. Ensure that EMSDK_ROOT is always exported in the Dockerfile or Docker Compose environment, or adjust the check to handle unset variables gracefully.

🔎 Alternative approach for safer unset variable handling
 # Source emsdk environment
-if [ -f "${EMSDK_ROOT}/emsdk_env.sh" ]; then
+if [ -n "${EMSDK_ROOT:-}" ] && [ -f "${EMSDK_ROOT}/emsdk_env.sh" ]; then
   source "${EMSDK_ROOT}/emsdk_env.sh"
 fi
docs/docs/project-scripts/overview.md (1)

12-12: LGTM!

The documentation correctly reflects the new CMake-based WASM build orchestration.

README.md (1)

55-55: LGTM!

The tech stack update correctly reflects the migration from Makefile-based to CMake-based WASM builds.

vite.config.js (1)

44-45: LGTM!

The server configuration correctly enables Docker container access by binding to all network interfaces (0.0.0.0) and fixing the port to align with the Docker Compose setup. This is standard practice for containerized development environments.

docs/docs/reference/wasm/modules/image/overview.md (1)

14-14: LGTM!

The documentation correctly updates the module structure to reflect the CMake-based build configuration.

docs/docs/project-scripts/build.md (1)

48-48: LGTM!

The documentation references have been correctly updated to point to the CMake-based orchestrator, reflecting the repository-wide migration from Makefile to CMake workflows.

Also applies to: 58-58

src/wasm/CMakeLists.txt (1)

7-28: LGTM!

The CMake project setup is well-structured with appropriate guards:

  • Reasonable minimum CMake version requirement (3.16)
  • Proper C++17 standard enforcement
  • Clear Emscripten verification with helpful error messaging
  • Sensible Release build type default
docs/docs/project-scripts/clean.md (1)

22-35: LGTM! Documentation accurately reflects the cross-platform build migration.

The updates correctly document the shift from rm -rf to rimraf for cross-platform compatibility and the migration from Makefile-based to CMake-based WASM cleanup workflow. The explanations are clear and align with the broader PR objectives.

Dockerfile.dev (1)

1-42: Well-structured development container configuration.

The Dockerfile follows best practices:

  • Uses a stable Node base image
  • Properly caches EMSDK installation in Docker layers
  • Installs necessary build dependencies
  • Configures appropriate environment variables for containerized development
  • Exposes the correct ports for Vite and Docusaurus
docker-compose.yml (1)

1-25: LGTM! Solid Docker Compose development setup.

The configuration is well-designed:

  • Named volumes isolate node_modules to prevent host/container filesystem conflicts
  • Appropriate port mappings for all development servers (Vite dev, preview, and Docusaurus)
  • CHOKIDAR polling enabled for reliable file watching in containerized environments
  • Interactive terminal support for development workflows
docs/docs/reference/wasm/how-to-add-a-module.md (1)

7-122: Clear documentation for CMake-based WASM module workflow.

The migration from Makefile to CMake is well-documented with:

  • Step-by-step instructions for creating a new module
  • Complete CMakeLists.txt template with proper Emscripten flags
  • Directory structure example
  • Build commands for both Release and Debug configurations

This will help contributors add new WASM modules consistently.

package.json (1)

17-21: LGTM! Scripts successfully migrated to cross-platform approach.

The script updates achieve the PR's cross-platform goals:

  • WASM build/clean scripts now delegate to a Node.js orchestrator instead of Makefile
  • rimraf replaces rm -rf for Windows compatibility
  • All changes are consistent with the documented CMake-based build workflow

Also applies to: 54-54

src/wasm/modules/image/CMakeLists.txt (1)

1-71: Well-structured CMake configuration for WASM module.

The CMakeLists.txt properly:

  • Derives module name from directory structure
  • Configures Emscripten-specific flags for web environment
  • Separates Debug and Release build configurations
  • Sets appropriate memory limits and growth settings
  • Generates correctly named output artifacts

This provides a solid template for the CMake-based WASM build workflow.

docs/docs/reference/wasm/overview.md (1)

31-44: LGTM! Documentation correctly reflects the CMake migration.

The updates accurately document the transition from Makefile-based to CMakeLists.txt-based WASM builds. The references to the root CMake configuration and the simplified command explanations align with the broader architectural changes in this PR.

docs/docs/reference/wasm/setup-and-dependencies.md (2)

1-148: Excellent documentation improvements!

The migration from Makefile to CMake-based workflow is well-documented with clear cross-platform instructions. The use of Docusaurus Tabs for OS-specific commands greatly improves usability, and the prerequisites section now clearly distinguishes between frontend-only and full WASM development requirements. Previous linting issues (MD001, MD040) and the Node.js version requirement have been properly addressed.


1-231: Well-structured cross-platform build script.

The script demonstrates excellent practices: comprehensive error handling, clear diagnostics, Windows-specific handling (emcc.bat, emcmake.bat), dynamic module discovery, and proper argument validation. The migration from Makefile to this Node.js orchestrator with CMake significantly improves the cross-platform developer experience.

Comment thread img2num.ps1
Comment thread README.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/docs/index.md (1)

26-29: Lines 28-29 contain incomplete placeholder links pointing to the current page.

Lines 28-29 both reference ./ (the current page) instead of actual documentation targets. No Examples or FAQ pages exist in the docs structure yet. Additionally, line 26 duplicates the installation link already provided on line 22 by both linking to ./introduction/getting-started.md.

Create the missing Examples and FAQ pages, or remove these items until the pages are ready.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 80ac27e and ea5040c.

📒 Files selected for processing (1)
  • docs/docs/index.md
🧰 Additional context used
🧠 Learnings (4)
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, do not create multiple markdown files at the repository root. The README.md at root should remain brief and point to the Docusaurus site.

Applied to files:

  • docs/docs/index.md
📚 Learning: 2025-12-20T20:11:28.389Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-20T20:11:28.389Z
Learning: In the Img2Num repository, all documentation should be properly organized in the docs/docs/ folder structure following the Docusaurus conventions, either as a dedicated category or integrated into existing categories like project-scripts.

Applied to files:

  • docs/docs/index.md
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, all documentation must be placed in the docs/docs/ folder following the Docusaurus structure, not at the repository root.

Applied to files:

  • docs/docs/index.md
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, avoid creating strangely-named markdown files (like COMPREHENSIVE_TEST_REPORT.md, DELIVERABLES.md, etc.) at the root level.

Applied to files:

  • docs/docs/index.md
🔇 Additional comments (1)
docs/docs/index.md (1)

33-44: Good fixes to past documentation issues.

The grammatical error from line 38 has been corrected ("an something" → "something"), and all GitHub URLs now consistently use HTTPS. These updates improve documentation quality and security.

@Ryan-Millard
Ryan-Millard force-pushed the feat/docker-docker-compose/issue-127 branch from ea5040c to 44819f7 Compare December 22, 2025 14:48
@Ryan-Millard Ryan-Millard added the BREAKING CHANGE This item relates to a change that could cause older features to be broken. label Dec 22, 2025

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/docs/index.md (1)

28-29: Remove or fix self-referential documentation links.

Lines 28–29 use ./ which resolves according to the page's URL location rather than its file system location, making both [Examples](./) and [FAQ](./) link back to the current page. Since no Examples or FAQ documentation pages exist in the repository, either remove these entries or replace them with links to relevant existing content (e.g., introduction/getting-started.md or project-scripts/overview.md).

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ea5040c and 44819f7.

📒 Files selected for processing (1)
  • docs/docs/index.md
🧰 Additional context used
🧠 Learnings (4)
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, do not create multiple markdown files at the repository root. The README.md at root should remain brief and point to the Docusaurus site.

Applied to files:

  • docs/docs/index.md
📚 Learning: 2025-12-20T20:11:28.389Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-20T20:11:28.389Z
Learning: In the Img2Num repository, all documentation should be properly organized in the docs/docs/ folder structure following the Docusaurus conventions, either as a dedicated category or integrated into existing categories like project-scripts.

Applied to files:

  • docs/docs/index.md
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, all documentation must be placed in the docs/docs/ folder following the Docusaurus structure, not at the repository root.

Applied to files:

  • docs/docs/index.md
📚 Learning: 2025-12-17T22:39:25.704Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, avoid creating strangely-named markdown files (like COMPREHENSIVE_TEST_REPORT.md, DELIVERABLES.md, etc.) at the root level.

Applied to files:

  • docs/docs/index.md
🔇 Additional comments (1)
docs/docs/index.md (1)

33-43: All GitHub issue template URLs are correct. The referenced template files (bug_report.yml and refactor.yml) exist in .github/ISSUE_TEMPLATE/, and the documentation links use the proper GitHub format with the ?template= query parameter pointing to the correct repository.

@Ryan-Millard

Copy link
Copy Markdown
Owner Author

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)

docs/docs/index.md (1)> 28-29: Remove or fix self-referential documentation links.

Lines 28–29 use ./ which resolves according to the page's URL location rather than its file system location, making both [Examples](./) and [FAQ](./) link back to the current page. Since no Examples or FAQ documentation pages exist in the repository, either remove these entries or replace them with links to relevant existing content (e.g., introduction/getting-started.md or project-scripts/overview.md).

📜 Review details

@CodeRabbit, is this still relevant after my force push?

@coderabbitai

coderabbitai Bot commented Dec 22, 2025

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check the current state of docs/docs/index.md, particularly around lines 28-29
cat docs/docs/index.md | head -n 35 | tail -n 15

Length of output: 554


@Ryan-Millard, yes, the comment is still relevant. I can see the Quick Links section in docs/docs/index.md still contains:

- [Examples](./) – Ready-to-use snippets and demos
- [FAQ](./) – Common questions answered

Both of these links use ./ which resolves to the current page location, making them self-referential. You'll need to either:

  1. Remove these two entries if Examples and FAQ pages don't exist yet, or
  2. Update them to point to actual documentation pages when you create them

The other Quick Links (Overview and Changelog) are working correctly since they point to specific paths.


🧠 Learnings used
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 0
File: :0-0
Timestamp: 2025-12-17T22:39:25.704Z
Learning: In the Img2Num repository, avoid creating strangely-named markdown files (like COMPREHENSIVE_TEST_REPORT.md, DELIVERABLES.md, etc.) at the root level.

@Ryan-Millard
Ryan-Millard force-pushed the feat/docker-docker-compose/issue-127 branch from 44819f7 to 9a24995 Compare December 22, 2025 14:57
@Ryan-Millard

Copy link
Copy Markdown
Owner Author

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain
🏁 Script executed:

#!/bin/bash
# Check the current state of docs/docs/index.md, particularly around lines 28-29
cat docs/docs/index.md | head -n 35 | tail -n 15

Length of output: 554

@Ryan-Millard, yes, the comment is still relevant. I can see the Quick Links section in docs/docs/index.md still contains:

- [Examples](./) – Ready-to-use snippets and demos
- [FAQ](./) – Common questions answered

Both of these links use ./ which resolves to the current page location, making them self-referential. You'll need to either:

  1. Remove these two entries if Examples and FAQ pages don't exist yet, or
  2. Update them to point to actual documentation pages when you create them

The other Quick Links (Overview and Changelog) are working correctly since they point to specific paths.

🧠 Learnings used

My apolocheese, @CodeRabbit. I forgot to stage the changes before force pushing. How is it now?

@coderabbitai

coderabbitai Bot commented Dec 22, 2025

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check the current state of docs/docs/index.md, particularly the Quick Links section
cat docs/docs/index.md

Length of output: 1540


@Ryan-Millard, perfect! 🎉 The issue is now resolved. The Quick Links section in docs/docs/index.md no longer contains the self-referential Examples and FAQ links. You now have only the working links:

  • Overview → ./introduction/getting-started.md
  • Changelog → /changelog

Both of these point to actual content, so there are no more self-referential link issues. Great job fixing that after staging the changes!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

BREAKING CHANGE This item relates to a change that could cause older features to be broken. tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feat: Docker & Docker-Compose BREAKING CHANGE: Build System Migration from Make to CMake Better support for Windows

2 participants