Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .github/workflows/r.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,17 @@ jobs:
r-version: release
use-public-rspm: true

# stringfish binaries (CRAN/P3M) still link the legacy TBB from

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.

P2 Unannounced CI workaround bundled into a docs-only PR with an unverified correctness premise

  • Location: .github/workflows/r.yml:38
  • Problem: PR title/body describe only the AGENTS.md code-owner gate policy note, yet the diff also adds a 'Prebuild stringfish from source' step to .github/workflows/r.yml that changes every R check run. The packet contains no completed check, failed-check log, or execution receipt for head SHA 38a53ac, so neither the claimed RcppParallel 6.2.0/stringfish TBB load failure nor the fix's effectiveness is corroborated.
  • Root cause: A CI reliability workaround was committed inside a docs PR without its own description or evidence, and without version pins or a tracked follow-up for removal.
  • Fix: Move the workaround into a separate PR (or document it in this PR body with the failing and passing run URLs), pin exact versions (RcppParallel 6.2.0, a fixed stringfish version and an RSPM snapshot) instead of installing latest at run time, and file an issue tracking 'Drop once upstream binaries are rebuilt'.
  • Regression test: Re-run the .github/workflows/r.yml 'Run R CMD check' job on this head and attach the run log showing the SimDesign source build and stringfish load succeeding without TBB symbol errors.

Suggested diff

```diff
-      # stringfish binaries (CRAN/P3M) still link the legacy TBB from
-      # RcppParallel <6.2 and fail to load against RcppParallel 6.2.0's oneTBB,
-      # which breaks the SimDesign source build inside setup-r-dependencies.
-      # Pre-build stringfish from real CRAN source (P3M serves binaries even
-      # via its source API); pak then keeps the installed copy. Drop once
-      # upstream binaries are rebuilt.
-      - name: Prebuild stringfish from source (TBB mismatch with RcppParallel 6.2.0)
-        run: |
-          Rscript -e 'install.packages(c("Rcpp", "RcppParallel"), repos = Sys.getenv("RSPM", unset = "https://cloud.r-project.org"))' \
-                  -e 'install.packages("stringfish", type = "source", repos = "https://cloud.r-project.org")'
-

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.

P2 Prebuild runs before setup-r-dependencies with floating latest versions, so the workaround can be silently defeated

  • Location: .github/workflows/r.yml:38
  • Problem: The step installs Rcpp/RcppParallel/stringfish with install.packages before r-lib/actions/setup-r-dependencies runs, and uses no version constraints. setup-r-dependencies manages its own package library/cache and pak-based resolution, so on cache-hit or re-resolution runs the binary stringfish can be restored or reinstalled, and the step's green result does not prove the load-time TBB mismatch is gone; upstream CRAN/P3M releases can also change behavior run to run.
  • Root cause: Dependency resolution is split between install.packages (floating latest) and the subsequent pak step, with the workaround placed at the earliest point in the job where a later cache restore can overwrite it.
  • Fix: Place the source build after setup-r-dependencies (so the source-built stringfish is what R CMD check loads) or disable the action cache for this job, pin versions to an explicit RSPM snapshot, and make the step assert the installed stringfish is a source build (e.g., check packageBuilt metadata).
  • Regression test: Run the R workflow twice (cold cache and warm cache) on this head and confirm both runs load stringfish without the TBB symbol error; verification command when available: re-run .github/workflows/r.yml and inspect the 'Run R CMD check' log for the load/source-build messages.

Suggested diff

```diff
       - name: Set up R package dependencies
         uses: r-lib/actions/setup-r-dependencies@d3c5be51b12e724e68f33216ca3c148b66d5f0b6
         with:
           extra-packages: any::rcmdcheck
           needs: check
 
+      # Move the stringfish source build AFTER dependency setup so the
+      # library cache/pak cannot restore the legacy-TBB binary over it.

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.

P2 Unannounced CI workaround bundled into a docs-only PR with an unverified correctness premise

  • Location: .github/workflows/r.yml:38
  • Problem: PR title 'docs(agents): code-owner gates disabled org-wide until multiple maintainers exist' and body describe only the AGENTS.md policy note, yet the diff also adds a 'Prebuild stringfish from source (TBB mismatch with RcppParallel 6.2.0)' step that changes every R check run. Failed GitHub Check evidence reports 'No completed failed GitHub Checks were present when evidence was collected' and no OPENCODE_EXECUTION_RECEIPT exists for the step at head SHA 38a53ac, so neither the claimed RcppParallel 6.2.0/stringfish TBB load failure nor the workaround's effectiveness is corroborated.
  • Root cause: Docs-only PR scope bundled an unverified CI workaround without announcing it in the title/body and without attaching completed check evidence for the head SHA.
  • Fix: Split the workflow change into a separate CI-focused PR, or update this PR's title/body to announce the workflow change and attach the completed successful R check run for this head SHA; keep AGENTS.md documentation change separate if preferred.
  • Regression test: Run the repository R check workflow (r-lib/actions/setup-r-dependencies then r-lib/actions/check-r-package) for head SHA 38a53ac and attach the completed check log proving R CMD check passes with the prebuilt stringfish.

Suggested diff

-      # stringfish binaries (CRAN/P3M) still link the legacy TBB from
-      # RcppParallel <6.2 and fail to load against RcppParallel 6.2.0's oneTBB,
-      # which breaks the SimDesign source build inside setup-r-dependencies.
-      # Pre-build stringfish from real CRAN source (P3M serves binaries even
-      # via its source API); pak then keeps the installed copy. Drop once
-      # upstream binaries are rebuilt.
-      - name: Prebuild stringfish from source (TBB mismatch with RcppParallel 6.2.0)
-        run: |
-          Rscript -e 'install.packages(c("Rcpp", "RcppParallel"), repos = Sys.getenv("RSPM", unset = "https://cloud.r-project.org"))' \
-                  -e 'install.packages("stringfish", type = "source", repos = "https://cloud.r-project.org")'
-

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.

P2 Floating-version prebuild runs before setup-r-dependencies and can be silently defeated on cache-hit runs

  • Location: .github/workflows/r.yml:38
  • Problem: The step installs Rcpp, RcppParallel, and stringfish via install.packages with no version constraints and runs before r-lib/actions/setup-r-dependencies, which manages its own pak-based library and cache. The step comment asserts 'pak then keeps the installed copy', but the workflow pins nothing and verifies nothing after dependency setup; on a cache-hit or re-resolution run setup-r-dependencies can restore or reinstall the P3M binary stringfish, so the step's green result does not prove the load-time TBB mismatch is gone.
  • Root cause: No version pins, no guarantee the prebuilt library is the library setup-r-dependencies resolves, and no post-setup verification step that asserts stringfish loads from the source build.
  • Fix: Pin exact versions (RcppParallel 6.2.0 and the matching stringfish release), install into the same library target that setup-r-dependencies uses (or declare the pins in DESCRIPTION/lockfile so pak resolves identically), and add a post-setup assertion step that loads stringfish.
  • Regression test: Run the workflow twice (cold and warm cache) and after setup-r-dependencies assert Rscript -e 'stopifnot(requireNamespace("stringfish"))' and compare packageVersion('stringfish') across runs.

Suggested diff

+      - name: Verify stringfish load after dependency setup
+        run: Rscript -e 'stopifnot(requireNamespace("stringfish"))'

# RcppParallel <6.2 and fail to load against RcppParallel 6.2.0's oneTBB,
# which breaks the SimDesign source build inside setup-r-dependencies.
# Pre-build stringfish from real CRAN source (P3M serves binaries even
# via its source API); pak then keeps the installed copy. Drop once
# upstream binaries are rebuilt.
- name: Prebuild stringfish from source (TBB mismatch with RcppParallel 6.2.0)
run: |
Rscript -e 'install.packages(c("Rcpp", "RcppParallel"), repos = Sys.getenv("RSPM", unset = "https://cloud.r-project.org"))' \
-e 'install.packages("stringfish", type = "source", repos = "https://cloud.r-project.org")'

- name: Set up R package dependencies
uses: r-lib/actions/setup-r-dependencies@d3c5be51b12e724e68f33216ca3c148b66d5f0b6
with:
Expand Down
10 changes: 10 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,13 @@ Applies to every agent (Claude, Codex, Cursor, opencode, ...) working in this re
psychometrics literature. Commit paper PDFs only when redistribution is
permitted; otherwise cite, link, and summarize.
<!-- END cwl-agent-guidance -->

## Code-owner review gates — disabled (on hold)

As of 2026-08-04, code-owner review requirements
(`require_code_owner_reviews` in branch protection,
`require_code_owner_review` in rulesets) are disabled across the
ContextualWisdomLab org: there is a single maintainer (solo developer), so
a code-owner approval gate can never be satisfied. This is ON HOLD until
the org has multiple maintainers — do NOT re-enable these settings or add
CODEOWNERS-based merge gates before then.
Loading