Skip to content

Conversation

davidlion
Copy link
Member

@davidlion davidlion commented Jul 24, 2025

  • Change tasks to support building a subset of libraries through ystdlib_LIBRARIES.
  • Add tasks for building debug and release versions.
  • Add tasks for building examples.
  • Rename tasks to begin with the verb.

Description

This PR refactors the following:

  • Change tasks from using wildcards to determine the target to build to using the ystdlib_LIBRARIES CMake variable (introduced in build(cmake)!: Add support for installation and usage as a library in other CMake projects; Add example project to test this use case. #65).

    • Previously, tasks could only specify an individual library/target or all libraries through a task wildcard. With the addition of the CMake variable we can now set it to support building/testing a subset of libraries.
  • Restructures the taskfiles (and therefore namespace):

    • :build: -> :ystdlib: for tasks building/cleaning/installing ystdlib or its libraries.
    • :test-* -> :test:run-* for tasks building/running the ystdlib tests.
  • Rename the following tasks to the verb-* pattern:

    • deps:boost -> deps:install-boost
    • deps:Catch2 -> deps:install-catch2
    • lint:cmake-check -> lint:check-cmake
    • lint:cpp-check -> lint:check-cpp
    • lint:yaml-check -> lint:check-yaml
    • lint:cmake-fix -> lint:fix-cmake
    • lint:cpp-fix -> lint:fix-cpp
    • lint:yaml-fix -> lint:fix-yaml
  • Migrate partially to IWYU style includes.

    • The current flattened lint.yaml structure breaks with multiple definitions of taskfiles, so it is left alone.
    • To support this in deps.yaml we bump the yscope-dev-utils submodule to pull in a fix related to dir usage in the boost tasks.

New features added in this PR:

  • Tasks to build the examples as previously this had to be done through CMake.
  • New tasks were adding to support choosing between build or release versions of ystdlib and the examples.
    • e.g. task ystdlib:build-debug, task test:run-release, task examples:build-debug
    • Run task -a for a full list.

Note for reviewer:
The diff for the changes to ystdlib.yaml (build.yaml) can be found here: e4d8ef0. Github combines these changes with the move/rename making it appear completely new.

Checklist

  • The PR satisfies the contribution guidelines.
  • This is a breaking change and that has been indicated in the PR title, OR this isn't a
    breaking change.
  • Necessary docs have been updated, OR no docs need to be updated.

Validation performed

New tasks tested manually and passing in CI.

Summary by CodeRabbit

  • New Features

    • Added new Taskfiles for building, testing, and managing the standard library and examples, supporting debug/release modes and selective builds.
    • Introduced streamlined commands for building, installing, and testing via Task, including specifying subsets of libraries.
    • Added new requirements and improved documentation for setup and usage, including [uv] dependency.
  • Bug Fixes

    • Updated workflow to fix compilation issues by running unit tests in debug mode only.
  • Refactor

    • Renamed and reorganized linting and build tasks for consistency and clarity.
    • Removed deprecated and redundant Taskfiles and variables.
    • Standardized task naming conventions across Taskfiles.
  • Chores

    • Updated GitHub Actions workflows to install new dependencies and expand test matrix.
    • Updated subproject reference for development utilities.
  • Documentation

    • Expanded and clarified build, install, and test instructions in README files.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

♻️ Duplicate comments (2)
README.md (1)

65-65: Inline-HTML heading anchor still violates MD033

The <a id="…"/> technique keeps re-raising MD033 warnings. If you stick with it, consider silencing the rule in .markdownlint.yaml; otherwise adopt the generated slug (### Using Task) and rely on GitHub’s auto-IDs.

taskfiles/ystdlib.yaml (1)

113-117: Empty list element still generated when .LIBRARIES is blank

The multi-line scalar leaves a dangling - entry, cluttering the CLI. Previous discussion noted Task’s templating limits, but if you ever revisit this section, switching to an if/else block inside cmds: (instead of in a YAML list) would avoid the artefact.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4146a03 and 69a7e8e.

📒 Files selected for processing (3)
  • README.md (4 hunks)
  • taskfiles/test.yaml (1 hunks)
  • taskfiles/ystdlib.yaml (1 hunks)
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#63
File: taskfiles/lint-cpp.yaml:75-83
Timestamp: 2025-05-26T15:34:11.199Z
Learning: In the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in single YAML list entries (e.g., "--config-file '{{.ROOT_DIR}}/.clang-tidy'") rather than separating them into individual entries, unless the values are too long. This improves readability and maintains consistency with the project's style.
Learnt from: PacificViking
PR: y-scope/ystdlib-cpp#65
File: CMakeLists.txt:87-88
Timestamp: 2025-06-06T15:01:53.987Z
Learning: The y-scope/ystdlib-cpp project uses lowercase `ystdlib_` prefix for project-specific CMake variables (e.g., `ystdlib_VERSION`, `ystdlib_BUILD_TESTING`, `ystdlib_INSTALL_CONFIG_DIR`) following the current naming convention standards.
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#62
File: taskfiles/deps.yaml:42-43
Timestamp: 2025-05-31T00:44:47.885Z
Learning: The `:utils:boost:download-and-install` task is defined in `tools/yscope-dev-utils/exports/taskfiles/utils/boost.yaml` at around line 128, providing Boost installation functionality for the project's dependency management.
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.
README.md (11)

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.

Learnt from: PacificViking
PR: #65
File: CMakeLists.txt:87-88
Timestamp: 2025-06-06T15:01:53.987Z
Learning: The y-scope/ystdlib-cpp project uses lowercase ystdlib_ prefix for project-specific CMake variables (e.g., ystdlib_VERSION, ystdlib_BUILD_TESTING, ystdlib_INSTALL_CONFIG_DIR) following the current naming convention standards.

Learnt from: davidlion
PR: #70
File: README.md:66-70
Timestamp: 2025-07-30T02:32:39.877Z
Learning: GitHub Flavored Markdown does not support the {#id} syntax for explicit heading IDs. This syntax works with Jekyll, Hugo, and other static site generators, but not with GitHub's native markdown processor. In GFM, custom heading anchors must use HTML tags with id attributes, which is the correct approach despite triggering markdownlint MD033 warnings.

Learnt from: anlowee
PR: #63
File: taskfiles/lint-cpp.yaml:75-83
Timestamp: 2025-05-26T15:34:11.199Z
Learning: In the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in single YAML list entries (e.g., "--config-file '{{.ROOT_DIR}}/.clang-tidy'") rather than separating them into individual entries, unless the values are too long. This improves readability and maintains consistency with the project's style.

Learnt from: anlowee
PR: #62
File: taskfiles/deps.yaml:42-43
Timestamp: 2025-05-31T00:44:47.885Z
Learning: The :utils:boost:download-and-install task is defined in tools/yscope-dev-utils/exports/taskfiles/utils/boost.yaml at around line 128, providing Boost installation functionality for the project's dependency management.

Learnt from: LinZhihao-723
PR: #66
File: taskfile.yaml:4-4
Timestamp: 2025-05-27T22:22:47.058Z
Learning: Task (go-task) has native support for set and shopt options in Taskfile.yaml that work with the default mvdan.cc/sh interpreter, without requiring interpreter: bash. The shopt: ["globstar"] option will enable recursive globbing patterns like **/* without additional shell configuration.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-04T13:29:59.638Z
Learning: Yscope coding guidelines prefer not to split standard libraries when organizing include statements. Headers should be organized by component group with all standard library includes grouped together.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-04T13:29:59.639Z
Learning: Yscope coding guidelines prefer not to split standard libraries when organizing include statements. Headers should be organized by component group with all standard library includes grouped together.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-06T20:42:41.772Z
Learning: In the y-scope/ystdlib-cpp project, the linting scope is limited to .h, .hpp, and .cpp files, and the header-only detection logic in CMake checks for .h, .hpp, and .inc extensions.

Learnt from: davidlion
PR: #70
File: taskfiles/ystdlib.yaml:0-0
Timestamp: 2025-07-28T14:16:32.691Z
Learning: Task (go-task) has limitations with Go template usage in YAML generation. Inline conditional templating to control YAML list elements (like {{- if .LIBRARIES }} - "arg" {{- end }}) is not supported, so multi-line scalar approaches may be necessary even if they produce empty elements when variables are blank.

taskfiles/test.yaml (7)

Learnt from: anlowee
PR: #63
File: taskfiles/lint-cpp.yaml:75-83
Timestamp: 2025-05-26T15:34:11.199Z
Learning: In the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in single YAML list entries (e.g., "--config-file '{{.ROOT_DIR}}/.clang-tidy'") rather than separating them into individual entries, unless the values are too long. This improves readability and maintains consistency with the project's style.

Learnt from: davidlion
PR: #70
File: taskfiles/ystdlib.yaml:0-0
Timestamp: 2025-07-28T14:16:32.691Z
Learning: Task (go-task) has limitations with Go template usage in YAML generation. Inline conditional templating to control YAML list elements (like {{- if .LIBRARIES }} - "arg" {{- end }}) is not supported, so multi-line scalar approaches may be necessary even if they produce empty elements when variables are blank.

Learnt from: PacificViking
PR: #65
File: CMakeLists.txt:87-88
Timestamp: 2025-06-06T15:01:53.987Z
Learning: The y-scope/ystdlib-cpp project uses lowercase ystdlib_ prefix for project-specific CMake variables (e.g., ystdlib_VERSION, ystdlib_BUILD_TESTING, ystdlib_INSTALL_CONFIG_DIR) following the current naming convention standards.

Learnt from: LinZhihao-723
PR: #66
File: taskfile.yaml:4-4
Timestamp: 2025-05-27T22:22:47.058Z
Learning: Task (go-task) has native support for set and shopt options in Taskfile.yaml that work with the default mvdan.cc/sh interpreter, without requiring interpreter: bash. The shopt: ["globstar"] option will enable recursive globbing patterns like **/* without additional shell configuration.

Learnt from: anlowee
PR: #62
File: taskfiles/deps.yaml:42-43
Timestamp: 2025-05-31T00:44:47.885Z
Learning: The :utils:boost:download-and-install task is defined in tools/yscope-dev-utils/exports/taskfiles/utils/boost.yaml at around line 128, providing Boost installation functionality for the project's dependency management.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-27T22:57:03.031Z
Learning: In unit tests for ystdlib-cpp, REQUIRE_FALSE is preferred over REQUIRE(!condition) for its explicit nature when checking that conditions are false.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-06T20:42:41.772Z
Learning: In the y-scope/ystdlib-cpp project, the linting scope is limited to .h, .hpp, and .cpp files, and the header-only detection logic in CMake checks for .h, .hpp, and .inc extensions.

taskfiles/ystdlib.yaml (13)

Learnt from: PacificViking
PR: #65
File: CMakeLists.txt:87-88
Timestamp: 2025-06-06T15:01:53.987Z
Learning: The y-scope/ystdlib-cpp project uses lowercase ystdlib_ prefix for project-specific CMake variables (e.g., ystdlib_VERSION, ystdlib_BUILD_TESTING, ystdlib_INSTALL_CONFIG_DIR) following the current naming convention standards.

Learnt from: anlowee
PR: #63
File: taskfiles/lint-cpp.yaml:75-83
Timestamp: 2025-05-26T15:34:11.199Z
Learning: In the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in single YAML list entries (e.g., "--config-file '{{.ROOT_DIR}}/.clang-tidy'") rather than separating them into individual entries, unless the values are too long. This improves readability and maintains consistency with the project's style.

Learnt from: anlowee
PR: #62
File: taskfiles/deps.yaml:42-43
Timestamp: 2025-05-31T00:44:47.885Z
Learning: The :utils:boost:download-and-install task is defined in tools/yscope-dev-utils/exports/taskfiles/utils/boost.yaml at around line 128, providing Boost installation functionality for the project's dependency management.

Learnt from: davidlion
PR: #70
File: taskfiles/ystdlib.yaml:0-0
Timestamp: 2025-07-28T14:16:32.691Z
Learning: Task (go-task) has limitations with Go template usage in YAML generation. Inline conditional templating to control YAML list elements (like {{- if .LIBRARIES }} - "arg" {{- end }}) is not supported, so multi-line scalar approaches may be necessary even if they produce empty elements when variables are blank.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-06T20:42:41.772Z
Learning: In the y-scope/ystdlib-cpp project, the linting scope is limited to .h, .hpp, and .cpp files, and the header-only detection logic in CMake checks for .h, .hpp, and .inc extensions.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.

Learnt from: LinZhihao-723
PR: #66
File: taskfile.yaml:4-4
Timestamp: 2025-05-27T22:22:47.058Z
Learning: Task (go-task) has native support for set and shopt options in Taskfile.yaml that work with the default mvdan.cc/sh interpreter, without requiring interpreter: bash. The shopt: ["globstar"] option will enable recursive globbing patterns like **/* without additional shell configuration.

Learnt from: davidlion
PR: #70
File: taskfiles/ystdlib.yaml:114-119
Timestamp: 2025-07-24T23:48:46.989Z
Learning: The osIsAbs template function is available in Task through slim-sprig's paths module (https://go-task.github.io/slim-sprig/paths.html) and provides robust cross-platform absolute path detection using Go's filepath.IsAbs() function, making it superior to simple prefix checks with hasPrefix.

Learnt from: davidlion
PR: #70
File: taskfiles/ystdlib.yaml:114-119
Timestamp: 2025-07-24T23:48:46.989Z
Learning: The osIsAbs template function is available in Task through slim-sprig's paths module (https://go-task.github.io/slim-sprig/paths.html) and provides robust cross-platform absolute path detection using Go's filepath.IsAbs() function, making it superior to simple prefix checks with hasPrefix.

Learnt from: LinZhihao-723
PR: #66
File: taskfile.yaml:4-4
Timestamp: 2025-05-27T22:22:47.058Z
Learning: Task (go-task) has native support for set and shopt options in Taskfile.yaml that work with Task's built-in shell interpreter library, without requiring interpreter: bash. The shopt: ["globstar"] option enables recursive globbing patterns like **/* and can be used globally or per-task without additional shell configuration.

Learnt from: Bill-hbrhbr
PR: #32
File: CMakeLists.txt:0-0
Timestamp: 2025-02-28T05:04:33.616Z
Learning: Bill-hbrhbr uses a maximum line length of 100 characters in CMake files and prefers to use backslash line continuations to maintain this limit.

Learnt from: Bill-hbrhbr
PR: #32
File: CMakeLists.txt:0-0
Timestamp: 2025-02-28T05:04:33.616Z
Learning: Bill-hbrhbr maintains a maximum line length of 100 characters in CMake files and uses backslash line continuations to maintain this limit.

🪛 markdownlint-cli2 (0.17.2)
README.md

65-65: Inline HTML
Element: a

(MD033, no-inline-html)


68-68: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


85-85: Inline HTML
Element: a

(MD033, no-inline-html)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: lint-check (ubuntu-24.04)
  • GitHub Check: build-ystdlib-cpp (macos-15, debug)
  • GitHub Check: build-ystdlib-cpp (macos-15, release)
  • GitHub Check: build-ystdlib-cpp (macos-14, debug)

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (2)
README.md (2)

68-71: Insert the required blank line before the fenced block

Rule MD031 is still triggered here. Add one empty line after “To build all libraries:” so the code block is surrounded by blank lines.


66-66: Inline-HTML anchor is intentional – mute MD033 once

The <a id="…"/> anchor is the only portable way to get custom IDs in GFM. Consider exempting <a> from MD033 in .markdownlint.yaml instead of changing the syntax again.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 69a7e8e and 8c45963.

📒 Files selected for processing (2)
  • .github/workflows/code-linting-checks.yaml (1 hunks)
  • README.md (4 hunks)
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#63
File: taskfiles/lint-cpp.yaml:75-83
Timestamp: 2025-05-26T15:34:11.199Z
Learning: In the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in single YAML list entries (e.g., "--config-file '{{.ROOT_DIR}}/.clang-tidy'") rather than separating them into individual entries, unless the values are too long. This improves readability and maintains consistency with the project's style.
Learnt from: PacificViking
PR: y-scope/ystdlib-cpp#65
File: CMakeLists.txt:87-88
Timestamp: 2025-06-06T15:01:53.987Z
Learning: The y-scope/ystdlib-cpp project uses lowercase `ystdlib_` prefix for project-specific CMake variables (e.g., `ystdlib_VERSION`, `ystdlib_BUILD_TESTING`, `ystdlib_INSTALL_CONFIG_DIR`) following the current naming convention standards.
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#62
File: taskfiles/deps.yaml:42-43
Timestamp: 2025-05-31T00:44:47.885Z
Learning: The `:utils:boost:download-and-install` task is defined in `tools/yscope-dev-utils/exports/taskfiles/utils/boost.yaml` at around line 128, providing Boost installation functionality for the project's dependency management.
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.
.github/workflows/code-linting-checks.yaml (8)

Learnt from: Bill-hbrhbr
PR: #32
File: CMakeLists.txt:0-0
Timestamp: 2025-02-28T05:04:33.616Z
Learning: Bill-hbrhbr uses a maximum line length of 100 characters in CMake files and prefers to use backslash line continuations to maintain this limit.

Learnt from: Bill-hbrhbr
PR: #32
File: CMakeLists.txt:0-0
Timestamp: 2025-02-28T05:04:33.616Z
Learning: Bill-hbrhbr maintains a maximum line length of 100 characters in CMake files and uses backslash line continuations to maintain this limit.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.

Learnt from: PacificViking
PR: #65
File: CMakeLists.txt:87-88
Timestamp: 2025-06-06T15:01:53.987Z
Learning: The y-scope/ystdlib-cpp project uses lowercase ystdlib_ prefix for project-specific CMake variables (e.g., ystdlib_VERSION, ystdlib_BUILD_TESTING, ystdlib_INSTALL_CONFIG_DIR) following the current naming convention standards.

Learnt from: anlowee
PR: #63
File: taskfiles/lint-cpp.yaml:75-83
Timestamp: 2025-05-26T15:34:11.199Z
Learning: In the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in single YAML list entries (e.g., "--config-file '{{.ROOT_DIR}}/.clang-tidy'") rather than separating them into individual entries, unless the values are too long. This improves readability and maintains consistency with the project's style.

Learnt from: LinZhihao-723
PR: #66
File: taskfile.yaml:4-4
Timestamp: 2025-05-27T22:22:47.058Z
Learning: Task (go-task) has native support for set and shopt options in Taskfile.yaml that work with the default mvdan.cc/sh interpreter, without requiring interpreter: bash. The shopt: ["globstar"] option will enable recursive globbing patterns like **/* without additional shell configuration.

Learnt from: LinZhihao-723
PR: #66
File: taskfile.yaml:4-4
Timestamp: 2025-05-27T22:22:47.058Z
Learning: Task (go-task) has native support for set and shopt options in Taskfile.yaml that work with Task's built-in shell interpreter library, without requiring interpreter: bash. The shopt: ["globstar"] option enables recursive globbing patterns like **/* and can be used globally or per-task without additional shell configuration.

README.md (11)

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.

Learnt from: PacificViking
PR: #65
File: CMakeLists.txt:87-88
Timestamp: 2025-06-06T15:01:53.987Z
Learning: The y-scope/ystdlib-cpp project uses lowercase ystdlib_ prefix for project-specific CMake variables (e.g., ystdlib_VERSION, ystdlib_BUILD_TESTING, ystdlib_INSTALL_CONFIG_DIR) following the current naming convention standards.

Learnt from: davidlion
PR: #70
File: README.md:66-70
Timestamp: 2025-07-30T02:32:39.877Z
Learning: GitHub Flavored Markdown does not support the {#id} syntax for explicit heading IDs. This syntax works with Jekyll, Hugo, and other static site generators, but not with GitHub's native markdown processor. In GFM, custom heading anchors must use HTML tags with id attributes, which is the correct approach despite triggering markdownlint MD033 warnings.

Learnt from: anlowee
PR: #63
File: taskfiles/lint-cpp.yaml:75-83
Timestamp: 2025-05-26T15:34:11.199Z
Learning: In the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in single YAML list entries (e.g., "--config-file '{{.ROOT_DIR}}/.clang-tidy'") rather than separating them into individual entries, unless the values are too long. This improves readability and maintains consistency with the project's style.

Learnt from: anlowee
PR: #62
File: taskfiles/deps.yaml:42-43
Timestamp: 2025-05-31T00:44:47.885Z
Learning: The :utils:boost:download-and-install task is defined in tools/yscope-dev-utils/exports/taskfiles/utils/boost.yaml at around line 128, providing Boost installation functionality for the project's dependency management.

Learnt from: LinZhihao-723
PR: #66
File: taskfile.yaml:4-4
Timestamp: 2025-05-27T22:22:47.058Z
Learning: Task (go-task) has native support for set and shopt options in Taskfile.yaml that work with the default mvdan.cc/sh interpreter, without requiring interpreter: bash. The shopt: ["globstar"] option will enable recursive globbing patterns like **/* without additional shell configuration.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-04T13:29:59.638Z
Learning: Yscope coding guidelines prefer not to split standard libraries when organizing include statements. Headers should be organized by component group with all standard library includes grouped together.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-04T13:29:59.639Z
Learning: Yscope coding guidelines prefer not to split standard libraries when organizing include statements. Headers should be organized by component group with all standard library includes grouped together.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-06T20:42:41.772Z
Learning: In the y-scope/ystdlib-cpp project, the linting scope is limited to .h, .hpp, and .cpp files, and the header-only detection logic in CMake checks for .h, .hpp, and .inc extensions.

Learnt from: davidlion
PR: #70
File: taskfiles/ystdlib.yaml:0-0
Timestamp: 2025-07-28T14:16:32.691Z
Learning: Task (go-task) has limitations with Go template usage in YAML generation. Inline conditional templating to control YAML list elements (like {{- if .LIBRARIES }} - "arg" {{- end }}) is not supported, so multi-line scalar approaches may be necessary even if they produce empty elements when variables are blank.

🪛 markdownlint-cli2 (0.17.2)
README.md

66-66: Inline HTML
Element: a

(MD033, no-inline-html)


69-69: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


73-73: Link fragments should be valid
Expected: #ystdlib_libraries; Actual: #ystdlib_LIBRARIES

(MD051, link-fragments)


80-80: Inline HTML
Element: a

(MD033, no-inline-html)


89-89: Link fragments should be valid
Expected: #ystdlib_libraries; Actual: #ystdlib_LIBRARIES

(MD051, link-fragments)


108-108: Link fragments should be valid
Expected: #ystdlib_libraries; Actual: #ystdlib_LIBRARIES

(MD051, link-fragments)


133-133: Link fragments should be valid
Expected: #ystdlib_libraries; Actual: #ystdlib_LIBRARIES

(MD051, link-fragments)

🪛 LanguageTool
README.md

[style] ~178-~178: To form a complete sentence, be sure to include a subject.
Context: .... #### Using Task ystdlib_LIBRARIES can be set in Task by adding it after the t...

(MISSING_IT_THERE)


[style] ~183-~183: For conciseness, consider replacing this expression with an adverb.
Context: ...IBRARIES="containers;io_interface" ``` At the moment, only build and install tasks in the `y...

(AT_THE_MOMENT)


[style] ~188-~188: To form a complete sentence, be sure to include a subject.
Context: ... #### Using CMake ystdlib_LIBRARIES can be set in CMake using -D in the gener...

(MISSING_IT_THERE)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
  • GitHub Check: build-ystdlib-cpp (ubuntu-24.04, release)
  • GitHub Check: build-ystdlib-cpp (ubuntu-24.04, debug)
  • GitHub Check: build-ystdlib-cpp (ubuntu-22.04, debug)
  • GitHub Check: build-ystdlib-cpp (macos-15, debug)
  • GitHub Check: build-ystdlib-cpp (ubuntu-22.04, release)
  • GitHub Check: build-ystdlib-cpp (macos-14, release)
  • GitHub Check: build-ystdlib-cpp (macos-15, release)
  • GitHub Check: build-ystdlib-cpp (macos-14, debug)
  • GitHub Check: lint-check (macos-15)
  • GitHub Check: lint-check (ubuntu-24.04)
🔇 Additional comments (1)
.github/workflows/code-linting-checks.yaml (1)

40-49: Keep existing UV install URL
The non-v URL (https://astral.sh/uv/0.8.4/install.sh) follows its 301 redirect and returns HTTP 200 with --location, whereas the v0.8.4 path 404s. No update required.

Likely an incorrect or invalid review comment.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (1)
README.md (1)

73-73: Broken internal link fragments – slug must be lower-case #ystdlib_libraries

The anchor generated by GFM for ### \ystdlib_LIBRARIES`isystdlib_libraries`.
All four references still use the outdated upper-case slug, so navigation is broken.

-[`ystdlib_LIBRARIES` parameter](#ystdlib_LIBRARIES)
+[`ystdlib_LIBRARIES` parameter](#ystdlib_libraries)

Apply the same replacement at Lines 73, 89, 108 and 133.

Also applies to: 89-89, 108-108, 133-133

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8c45963 and 20c5ee2.

📒 Files selected for processing (1)
  • README.md (4 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#63
File: taskfiles/lint-cpp.yaml:75-83
Timestamp: 2025-05-26T15:34:11.199Z
Learning: In the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in single YAML list entries (e.g., "--config-file '{{.ROOT_DIR}}/.clang-tidy'") rather than separating them into individual entries, unless the values are too long. This improves readability and maintains consistency with the project's style.
Learnt from: PacificViking
PR: y-scope/ystdlib-cpp#65
File: CMakeLists.txt:87-88
Timestamp: 2025-06-06T15:01:53.987Z
Learning: The y-scope/ystdlib-cpp project uses lowercase `ystdlib_` prefix for project-specific CMake variables (e.g., `ystdlib_VERSION`, `ystdlib_BUILD_TESTING`, `ystdlib_INSTALL_CONFIG_DIR`) following the current naming convention standards.
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#62
File: taskfiles/deps.yaml:42-43
Timestamp: 2025-05-31T00:44:47.885Z
Learning: The `:utils:boost:download-and-install` task is defined in `tools/yscope-dev-utils/exports/taskfiles/utils/boost.yaml` at around line 128, providing Boost installation functionality for the project's dependency management.
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.
README.md (11)

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.

Learnt from: PacificViking
PR: #65
File: CMakeLists.txt:87-88
Timestamp: 2025-06-06T15:01:53.987Z
Learning: The y-scope/ystdlib-cpp project uses lowercase ystdlib_ prefix for project-specific CMake variables (e.g., ystdlib_VERSION, ystdlib_BUILD_TESTING, ystdlib_INSTALL_CONFIG_DIR) following the current naming convention standards.

Learnt from: davidlion
PR: #70
File: README.md:66-70
Timestamp: 2025-07-30T02:32:39.877Z
Learning: GitHub Flavored Markdown does not support the {#id} syntax for explicit heading IDs. This syntax works with Jekyll, Hugo, and other static site generators, but not with GitHub's native markdown processor. In GFM, custom heading anchors must use HTML tags with id attributes, which is the correct approach despite triggering markdownlint MD033 warnings.

Learnt from: anlowee
PR: #63
File: taskfiles/lint-cpp.yaml:75-83
Timestamp: 2025-05-26T15:34:11.199Z
Learning: In the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in single YAML list entries (e.g., "--config-file '{{.ROOT_DIR}}/.clang-tidy'") rather than separating them into individual entries, unless the values are too long. This improves readability and maintains consistency with the project's style.

Learnt from: anlowee
PR: #62
File: taskfiles/deps.yaml:42-43
Timestamp: 2025-05-31T00:44:47.885Z
Learning: The :utils:boost:download-and-install task is defined in tools/yscope-dev-utils/exports/taskfiles/utils/boost.yaml at around line 128, providing Boost installation functionality for the project's dependency management.

Learnt from: LinZhihao-723
PR: #66
File: taskfile.yaml:4-4
Timestamp: 2025-05-27T22:22:47.058Z
Learning: Task (go-task) has native support for set and shopt options in Taskfile.yaml that work with the default mvdan.cc/sh interpreter, without requiring interpreter: bash. The shopt: ["globstar"] option will enable recursive globbing patterns like **/* without additional shell configuration.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-04T13:29:59.638Z
Learning: Yscope coding guidelines prefer not to split standard libraries when organizing include statements. Headers should be organized by component group with all standard library includes grouped together.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-04T13:29:59.639Z
Learning: Yscope coding guidelines prefer not to split standard libraries when organizing include statements. Headers should be organized by component group with all standard library includes grouped together.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-06T20:42:41.772Z
Learning: In the y-scope/ystdlib-cpp project, the linting scope is limited to .h, .hpp, and .cpp files, and the header-only detection logic in CMake checks for .h, .hpp, and .inc extensions.

Learnt from: davidlion
PR: #70
File: taskfiles/ystdlib.yaml:0-0
Timestamp: 2025-07-28T14:16:32.691Z
Learning: Task (go-task) has limitations with Go template usage in YAML generation. Inline conditional templating to control YAML list elements (like {{- if .LIBRARIES }} - "arg" {{- end }}) is not supported, so multi-line scalar approaches may be necessary even if they produce empty elements when variables are blank.

🪛 markdownlint-cli2 (0.17.2)
README.md

66-66: Inline HTML
Element: a

(MD033, no-inline-html)


69-69: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


73-73: Link fragments should be valid
Expected: #ystdlib_libraries; Actual: #ystdlib_LIBRARIES

(MD051, link-fragments)


80-80: Inline HTML
Element: a

(MD033, no-inline-html)


89-89: Link fragments should be valid
Expected: #ystdlib_libraries; Actual: #ystdlib_LIBRARIES

(MD051, link-fragments)


108-108: Link fragments should be valid
Expected: #ystdlib_libraries; Actual: #ystdlib_LIBRARIES

(MD051, link-fragments)


133-133: Link fragments should be valid
Expected: #ystdlib_libraries; Actual: #ystdlib_LIBRARIES

(MD051, link-fragments)

🪛 LanguageTool
README.md

[style] ~183-~183: For conciseness, consider replacing this expression with an adverb.
Context: ...IBRARIES="containers;io_interface" ``` At the moment, only build and install tasks in the `y...

(AT_THE_MOMENT)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
  • GitHub Check: build-ystdlib-cpp (ubuntu-24.04, release)
  • GitHub Check: build-ystdlib-cpp (ubuntu-24.04, debug)
  • GitHub Check: build-ystdlib-cpp (ubuntu-22.04, debug)
  • GitHub Check: build-ystdlib-cpp (ubuntu-22.04, release)
  • GitHub Check: build-ystdlib-cpp (macos-15, debug)
  • GitHub Check: build-ystdlib-cpp (macos-15, release)
  • GitHub Check: build-ystdlib-cpp (macos-14, debug)
  • GitHub Check: build-ystdlib-cpp (macos-14, release)
  • GitHub Check: lint-check (macos-15)
  • GitHub Check: lint-check (ubuntu-24.04)

@davidlion davidlion requested a review from Bill-hbrhbr July 31, 2025 00:02
```shell
cmake -S . -B ./build -Dystdlib_LIBRARIES="containers;io_interface"
```

Copy link
Collaborator

Choose a reason for hiding this comment

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

Might want to add a short section for INSTALL_PREFIX? Even though it's very self-explanatory.

Co-authored-by: Bingran Hu <[email protected]>
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (2)
README.md (2)

63-70: Inline anchor may be unnecessary – consider dropping it

Because GitHub already generates the slug building-using-task, the explicit <a> tag on the next line could be removed to avoid MD033 without losing the deep link.
Same pattern recurs for the CMake and install headings.


66-70: MD033 resurfaces for the four new headings

The self-closing <a> tags (Lines 66, 81, 103, 120) still trigger markdown-lint. Either whitelist the element once in .markdownlint.yaml:

 MD033:
-  allowed_elements: []
+  allowed_elements: ["a"]

or rely on GitHub’s auto-generated IDs and drop the inline HTML.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 76d5f64 and c6dccc2.

📒 Files selected for processing (1)
  • README.md (4 hunks)
🧰 Additional context used
🧠 Learnings (10)
📓 Common learnings
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#63
File: taskfiles/lint-cpp.yaml:75-83
Timestamp: 2025-05-26T15:34:11.199Z
Learning: In the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in single YAML list entries (e.g., "--config-file '{{.ROOT_DIR}}/.clang-tidy'") rather than separating them into individual entries, unless the values are too long. This improves readability and maintains consistency with the project's style.
Learnt from: PacificViking
PR: y-scope/ystdlib-cpp#65
File: CMakeLists.txt:87-88
Timestamp: 2025-06-06T15:01:53.987Z
Learning: The y-scope/ystdlib-cpp project uses lowercase `ystdlib_` prefix for project-specific CMake variables (e.g., `ystdlib_VERSION`, `ystdlib_BUILD_TESTING`, `ystdlib_INSTALL_CONFIG_DIR`) following the current naming convention standards.
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#62
File: taskfiles/deps.yaml:42-43
Timestamp: 2025-05-31T00:44:47.885Z
Learning: The `:utils:boost:download-and-install` task is defined in `tools/yscope-dev-utils/exports/taskfiles/utils/boost.yaml` at around line 128, providing Boost installation functionality for the project's dependency management.
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.
📚 Learning: the readme.md in the ystdlib-cpp repository consistently uses atx style markdown headings (with # sy...
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.

Applied to files:

  • README.md
📚 Learning: the y-scope/ystdlib-cpp project uses lowercase `ystdlib_` prefix for project-specific cmake variable...
Learnt from: PacificViking
PR: y-scope/ystdlib-cpp#65
File: CMakeLists.txt:87-88
Timestamp: 2025-06-06T15:01:53.987Z
Learning: The y-scope/ystdlib-cpp project uses lowercase `ystdlib_` prefix for project-specific CMake variables (e.g., `ystdlib_VERSION`, `ystdlib_BUILD_TESTING`, `ystdlib_INSTALL_CONFIG_DIR`) following the current naming convention standards.

Applied to files:

  • README.md
📚 Learning: github flavored markdown does not support the {#id} syntax for explicit heading ids. this syntax wor...
Learnt from: davidlion
PR: y-scope/ystdlib-cpp#70
File: README.md:66-70
Timestamp: 2025-07-30T02:32:39.877Z
Learning: GitHub Flavored Markdown does not support the {#id} syntax for explicit heading IDs. This syntax works with Jekyll, Hugo, and other static site generators, but not with GitHub's native markdown processor. In GFM, custom heading anchors must use HTML <a> tags with id attributes, which is the correct approach despite triggering markdownlint MD033 warnings.

Applied to files:

  • README.md
📚 Learning: in the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in...
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#63
File: taskfiles/lint-cpp.yaml:75-83
Timestamp: 2025-05-26T15:34:11.199Z
Learning: In the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in single YAML list entries (e.g., "--config-file '{{.ROOT_DIR}}/.clang-tidy'") rather than separating them into individual entries, unless the values are too long. This improves readability and maintains consistency with the project's style.

Applied to files:

  • README.md
📚 Learning: the `:utils:boost:download-and-install` task is defined in `tools/yscope-dev-utils/exports/taskfiles...
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#62
File: taskfiles/deps.yaml:42-43
Timestamp: 2025-05-31T00:44:47.885Z
Learning: The `:utils:boost:download-and-install` task is defined in `tools/yscope-dev-utils/exports/taskfiles/utils/boost.yaml` at around line 128, providing Boost installation functionality for the project's dependency management.

Applied to files:

  • README.md
📚 Learning: task (go-task) has native support for `set` and `shopt` options in taskfile.yaml that work with the ...
Learnt from: LinZhihao-723
PR: y-scope/ystdlib-cpp#66
File: taskfile.yaml:4-4
Timestamp: 2025-05-27T22:22:47.058Z
Learning: Task (go-task) has native support for `set` and `shopt` options in Taskfile.yaml that work with the default `mvdan.cc/sh` interpreter, without requiring `interpreter: bash`. The `shopt: ["globstar"]` option will enable recursive globbing patterns like `**/*` without additional shell configuration.

Applied to files:

  • README.md
📚 Learning: yscope coding guidelines prefer not to split standard libraries when organizing include statements. ...
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-04T13:29:59.639Z
Learning: Yscope coding guidelines prefer not to split standard libraries when organizing include statements. Headers should be organized by component group with all standard library includes grouped together.

Applied to files:

  • README.md
📚 Learning: task (go-task) has limitations with go template usage in yaml generation. inline conditional templat...
Learnt from: davidlion
PR: y-scope/ystdlib-cpp#70
File: taskfiles/ystdlib.yaml:0-0
Timestamp: 2025-07-28T14:16:32.691Z
Learning: Task (go-task) has limitations with Go template usage in YAML generation. Inline conditional templating to control YAML list elements (like `{{- if .LIBRARIES }} - "arg" {{- end }}`) is not supported, so multi-line scalar approaches may be necessary even if they produce empty elements when variables are blank.

Applied to files:

  • README.md
📚 Learning: in the y-scope/ystdlib-cpp project, the linting scope is limited to .h, .hpp, and .cpp files, and th...
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-06T20:42:41.772Z
Learning: In the y-scope/ystdlib-cpp project, the linting scope is limited to .h, .hpp, and .cpp files, and the header-only detection logic in CMake checks for .h, .hpp, and .inc extensions.

Applied to files:

  • README.md
🪛 markdownlint-cli2 (0.17.2)
README.md

66-66: Inline HTML
Element: a

(MD033, no-inline-html)


81-81: Inline HTML
Element: a

(MD033, no-inline-html)


103-103: Inline HTML
Element: a

(MD033, no-inline-html)


120-120: Inline HTML
Element: a

(MD033, no-inline-html)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
  • GitHub Check: build-ystdlib-cpp (macos-15, debug)
  • GitHub Check: build-ystdlib-cpp (ubuntu-22.04, release)
  • GitHub Check: build-ystdlib-cpp (ubuntu-24.04, release)
  • GitHub Check: build-ystdlib-cpp (ubuntu-24.04, debug)
  • GitHub Check: build-ystdlib-cpp (ubuntu-22.04, debug)
  • GitHub Check: lint-check (ubuntu-24.04)
  • GitHub Check: build-ystdlib-cpp (macos-15, release)
  • GitHub Check: build-ystdlib-cpp (macos-14, debug)
  • GitHub Check: lint-check (macos-15)
🔇 Additional comments (1)
README.md (1)

46-47: uv requirement addition looks correct

Stating the minimum uv version matches the new workflow-setup steps — no issues here.

@davidlion davidlion requested a review from Bill-hbrhbr July 31, 2025 18:25
Copy link
Collaborator

@Bill-hbrhbr Bill-hbrhbr left a comment

Choose a reason for hiding this comment

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

lgtm

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (2)
README.md (2)

66-66: Suppress unavoidable MD033 warnings for inline anchors
The HTML <a> tags are required for custom IDs in GFM; markdownlint will keep flagging them. Add the following to .markdownlint.yaml once to silence the false positives instead of sprinkling <!-- markdownlint-disable --> comments:

MD033:
  allowed_elements: ["a"]

Also applies to: 81-81, 103-103, 120-120


190-192: Clarify which tasks honour ystdlib_LIBRARIES
Earlier examples show the flag working with test: tasks, yet this note implies support is hit-or-miss. Listing the supported namespaces (e.g., ystdlib:, test:) or linking to task descriptions would remove ambiguity.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c6dccc2 and ae58bfa.

📒 Files selected for processing (1)
  • README.md (4 hunks)
🧰 Additional context used
🧠 Learnings (13)
📓 Common learnings
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#63
File: taskfiles/lint-cpp.yaml:75-83
Timestamp: 2025-05-26T15:34:11.199Z
Learning: In the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in single YAML list entries (e.g., "--config-file '{{.ROOT_DIR}}/.clang-tidy'") rather than separating them into individual entries, unless the values are too long. This improves readability and maintains consistency with the project's style.
Learnt from: PacificViking
PR: y-scope/ystdlib-cpp#65
File: CMakeLists.txt:87-88
Timestamp: 2025-06-06T15:01:53.987Z
Learning: The y-scope/ystdlib-cpp project uses lowercase `ystdlib_` prefix for project-specific CMake variables (e.g., `ystdlib_VERSION`, `ystdlib_BUILD_TESTING`, `ystdlib_INSTALL_CONFIG_DIR`) following the current naming convention standards.
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#62
File: taskfiles/deps.yaml:42-43
Timestamp: 2025-05-31T00:44:47.885Z
Learning: The `:utils:boost:download-and-install` task is defined in `tools/yscope-dev-utils/exports/taskfiles/utils/boost.yaml` at around line 128, providing Boost installation functionality for the project's dependency management.
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.
📚 Learning: the readme.md in the ystdlib-cpp repository consistently uses atx style markdown headings (with # sy...
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.

Applied to files:

  • README.md
📚 Learning: the y-scope/ystdlib-cpp project uses lowercase `ystdlib_` prefix for project-specific cmake variable...
Learnt from: PacificViking
PR: y-scope/ystdlib-cpp#65
File: CMakeLists.txt:87-88
Timestamp: 2025-06-06T15:01:53.987Z
Learning: The y-scope/ystdlib-cpp project uses lowercase `ystdlib_` prefix for project-specific CMake variables (e.g., `ystdlib_VERSION`, `ystdlib_BUILD_TESTING`, `ystdlib_INSTALL_CONFIG_DIR`) following the current naming convention standards.

Applied to files:

  • README.md
📚 Learning: github flavored markdown does not support the {#id} syntax for explicit heading ids. this syntax wor...
Learnt from: davidlion
PR: y-scope/ystdlib-cpp#70
File: README.md:66-70
Timestamp: 2025-07-30T02:32:39.877Z
Learning: GitHub Flavored Markdown does not support the {#id} syntax for explicit heading IDs. This syntax works with Jekyll, Hugo, and other static site generators, but not with GitHub's native markdown processor. In GFM, custom heading anchors must use HTML <a> tags with id attributes, which is the correct approach despite triggering markdownlint MD033 warnings.

Applied to files:

  • README.md
📚 Learning: in the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in...
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#63
File: taskfiles/lint-cpp.yaml:75-83
Timestamp: 2025-05-26T15:34:11.199Z
Learning: In the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in single YAML list entries (e.g., "--config-file '{{.ROOT_DIR}}/.clang-tidy'") rather than separating them into individual entries, unless the values are too long. This improves readability and maintains consistency with the project's style.

Applied to files:

  • README.md
📚 Learning: the `:utils:boost:download-and-install` task is defined in `tools/yscope-dev-utils/exports/taskfiles...
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#62
File: taskfiles/deps.yaml:42-43
Timestamp: 2025-05-31T00:44:47.885Z
Learning: The `:utils:boost:download-and-install` task is defined in `tools/yscope-dev-utils/exports/taskfiles/utils/boost.yaml` at around line 128, providing Boost installation functionality for the project's dependency management.

Applied to files:

  • README.md
📚 Learning: task (go-task) has native support for `set` and `shopt` options in taskfile.yaml that work with the ...
Learnt from: LinZhihao-723
PR: y-scope/ystdlib-cpp#66
File: taskfile.yaml:4-4
Timestamp: 2025-05-27T22:22:47.058Z
Learning: Task (go-task) has native support for `set` and `shopt` options in Taskfile.yaml that work with the default `mvdan.cc/sh` interpreter, without requiring `interpreter: bash`. The `shopt: ["globstar"]` option will enable recursive globbing patterns like `**/*` without additional shell configuration.

Applied to files:

  • README.md
📚 Learning: yscope coding guidelines prefer not to split standard libraries when organizing include statements. ...
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-04T13:29:59.639Z
Learning: Yscope coding guidelines prefer not to split standard libraries when organizing include statements. Headers should be organized by component group with all standard library includes grouped together.

Applied to files:

  • README.md
📚 Learning: in the y-scope/ystdlib-cpp project, the linting scope is limited to .h, .hpp, and .cpp files, and th...
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-06T20:42:41.772Z
Learning: In the y-scope/ystdlib-cpp project, the linting scope is limited to .h, .hpp, and .cpp files, and the header-only detection logic in CMake checks for .h, .hpp, and .inc extensions.

Applied to files:

  • README.md
📚 Learning: task (go-task) has limitations with go template usage in yaml generation. inline conditional templat...
Learnt from: davidlion
PR: y-scope/ystdlib-cpp#70
File: taskfiles/ystdlib.yaml:0-0
Timestamp: 2025-07-28T14:16:32.691Z
Learning: Task (go-task) has limitations with Go template usage in YAML generation. Inline conditional templating to control YAML list elements (like `{{- if .LIBRARIES }} - "arg" {{- end }}`) is not supported, so multi-line scalar approaches may be necessary even if they produce empty elements when variables are blank.

Applied to files:

  • README.md
📚 Learning: in unit tests for ystdlib-cpp, `require_false` is preferred over `require(!condition)` for its expli...
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-27T22:57:03.031Z
Learning: In unit tests for ystdlib-cpp, `REQUIRE_FALSE` is preferred over `REQUIRE(!condition)` for its explicit nature when checking that conditions are false.

Applied to files:

  • README.md
📚 Learning: bill-hbrhbr uses a maximum line length of 100 characters in cmake files and prefers to use backslash...
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#32
File: CMakeLists.txt:0-0
Timestamp: 2025-02-28T05:04:33.616Z
Learning: Bill-hbrhbr uses a maximum line length of 100 characters in CMake files and prefers to use backslash line continuations to maintain this limit.

Applied to files:

  • README.md
📚 Learning: task (go-task) has native support for `set` and `shopt` options in taskfile.yaml that work with task...
Learnt from: LinZhihao-723
PR: y-scope/ystdlib-cpp#66
File: taskfile.yaml:4-4
Timestamp: 2025-05-27T22:22:47.058Z
Learning: Task (go-task) has native support for `set` and `shopt` options in Taskfile.yaml that work with Task's built-in shell interpreter library, without requiring `interpreter: bash`. The `shopt: ["globstar"]` option enables recursive globbing patterns like `**/*` and can be used globally or per-task without additional shell configuration.

Applied to files:

  • README.md
🪛 markdownlint-cli2 (0.17.2)
README.md

66-66: Inline HTML
Element: a

(MD033, no-inline-html)


81-81: Inline HTML
Element: a

(MD033, no-inline-html)


103-103: Inline HTML
Element: a

(MD033, no-inline-html)


120-120: Inline HTML
Element: a

(MD033, no-inline-html)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
  • GitHub Check: build-ystdlib-cpp (ubuntu-24.04, debug)
  • GitHub Check: build-ystdlib-cpp (ubuntu-22.04, release)
  • GitHub Check: build-ystdlib-cpp (ubuntu-22.04, debug)
  • GitHub Check: build-ystdlib-cpp (ubuntu-24.04, release)
  • GitHub Check: build-ystdlib-cpp (macos-14, release)
  • GitHub Check: build-ystdlib-cpp (macos-15, debug)
  • GitHub Check: build-ystdlib-cpp (macos-15, release)
  • GitHub Check: lint-check (ubuntu-24.04)
  • GitHub Check: lint-check (macos-15)
🔇 Additional comments (2)
README.md (2)

46-47: Add install guidance for the new uv dependency
You added uv (≥ 0.7.10) to the requirements list, but there’s no mention of how users obtain it (Task target, package-manager name, etc.). A short note or a pointer to the correct Task (deps: scope) would keep the setup instructions self-contained.


74-76: Internal link slug fixed – nice catch
#ystdlib_libraries now matches GFM’s generated ID and resolves correctly.

Also applies to: 90-91

Comment on lines +63 to 65
The library can be built via [Task](#building-using-task) or directly with
[CMake](#building-using-cmake).

Copy link

@coderabbitai coderabbitai bot Jul 31, 2025

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Micro-wording tweak for flow
Consider “built with Task or CMake” – the current “via Task or directly with CMake” is a bit clunky.

-The library can be built via [Task](#building-using-task) or directly with
-[CMake](#building-using-cmake).
+The library can be built with [Task](#building-using-task) or with
+[CMake](#building-using-cmake).
📝 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
The library can be built via [Task](#building-using-task) or directly with
[CMake](#building-using-cmake).
The library can be built with [Task](#building-using-task) or with
[CMake](#building-using-cmake).
🤖 Prompt for AI Agents
In README.md around lines 63 to 65, the phrase "built via Task or directly with
CMake" is awkward. Simplify the wording to "built with Task or CMake" to improve
flow and readability. Replace the existing phrase accordingly without changing
the meaning.

Copy link
Collaborator

Choose a reason for hiding this comment

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

directly because it's a CMake project. Task is not the native build tool

Copy link

Choose a reason for hiding this comment

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

@Bill-hbrhbr Thank you for the clarification! You're absolutely right - the distinction between "directly with CMake" (the native build system) and "via Task" (the task runner wrapper) is intentionally precise and technically accurate. I appreciate you explaining the reasoning behind the wording choice.


✏️ Learnings added
Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#70
File: README.md:63-65
Timestamp: 2025-07-31T18:28:51.292Z
Learning: In the ystdlib-cpp project, CMake is the native build system and Task is a task runner that provides convenience commands but ultimately invokes CMake. Documentation should use "directly with CMake" and "via Task" to emphasize this technical distinction between the native tool and the wrapper tool.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


🧠 Learnings used
Learnt from: anlowee
PR: y-scope/ystdlib-cpp#62
File: taskfiles/deps.yaml:42-43
Timestamp: 2025-05-31T00:44:47.885Z
Learning: The `:utils:boost:download-and-install` task is defined in `tools/yscope-dev-utils/exports/taskfiles/utils/boost.yaml` at around line 128, providing Boost installation functionality for the project's dependency management.

Learnt from: anlowee
PR: y-scope/ystdlib-cpp#63
File: taskfiles/lint-cpp.yaml:75-83
Timestamp: 2025-05-26T15:34:11.199Z
Learning: In the ystdlib-cpp project taskfiles, prefer keeping command-line flags and their values together in single YAML list entries (e.g., "--config-file '{{.ROOT_DIR}}/.clang-tidy'") rather than separating them into individual entries, unless the values are too long. This improves readability and maintains consistency with the project's style.

Learnt from: LinZhihao-723
PR: y-scope/ystdlib-cpp#66
File: taskfile.yaml:4-4
Timestamp: 2025-05-27T22:22:47.058Z
Learning: Task (go-task) has native support for `set` and `shopt` options in Taskfile.yaml that work with the default `mvdan.cc/sh` interpreter, without requiring `interpreter: bash`. The `shopt: ["globstar"]` option will enable recursive globbing patterns like `**/*` without additional shell configuration.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#0
File: :0-0
Timestamp: 2025-03-01T05:38:37.570Z
Learning: The README.md in the ystdlib-cpp repository consistently uses ATX style markdown headings (with # symbols) throughout the document.

Learnt from: PacificViking
PR: y-scope/ystdlib-cpp#65
File: CMakeLists.txt:87-88
Timestamp: 2025-06-06T15:01:53.987Z
Learning: The y-scope/ystdlib-cpp project uses lowercase `ystdlib_` prefix for project-specific CMake variables (e.g., `ystdlib_VERSION`, `ystdlib_BUILD_TESTING`, `ystdlib_INSTALL_CONFIG_DIR`) following the current naming convention standards.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#32
File: CMakeLists.txt:0-0
Timestamp: 2025-02-28T05:04:33.616Z
Learning: Bill-hbrhbr uses a maximum line length of 100 characters in CMake files and prefers to use backslash line continuations to maintain this limit.

Learnt from: Bill-hbrhbr
PR: y-scope/ystdlib-cpp#32
File: CMakeLists.txt:0-0
Timestamp: 2025-02-28T05:04:33.616Z
Learning: Bill-hbrhbr maintains a maximum line length of 100 characters in CMake files and uses backslash line continuations to maintain this limit.

@Bill-hbrhbr
Copy link
Collaborator

Bill-hbrhbr commented Jul 31, 2025

For title, how about:
feat(taskfile): Add taskfile support and CI for building/testing ystdlib and examples in both debug and release modes; Refactor taskfiles to align with current guidelines.

@davidlion davidlion changed the title feat(taskfile): Add taskfile support for building examples; Add taskfile support for building debug and release versions; Refactor taskfiles towards meeting the current guidelines. feat(taskfile): Add more build tasks and rename others according to latest conventions: Jul 31, 2025
@davidlion
Copy link
Member Author

For title, how about: feat(taskfile): Add taskfile support and CI for building/testing ystdlib and examples in both debug and release modes; Refactor taskfiles to align with current guidelines.

Title updated based on discussion with Kirk and Bill.

@davidlion davidlion merged commit 4ede2e5 into y-scope:main Jul 31, 2025
12 of 13 checks passed
@davidlion davidlion deleted the taskfile-rewrite branch July 31, 2025 19:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants