Repository navigation
Validation/issue 23 native da - #70
Open
hyperpolymath wants to merge 16 commits into
Open
hyperpolymath wants to merge 16 commits into
hyperpolymath wants to merge 16 commits into
Conversation
Validate the existing differential route and tab with a local CompositionalDA development checkout in CI. This branch is not an upstream integration candidate: registration and a registry-resolved Manifest are still required. No renv.lock change.
Use the checksummed Julia archive and GitHub cache without changing the action allowlist. Preserve the full test suite and assert bootstrap pin equivalence; omit only fork coverage upload. Export all ALDEx2 statistics in the CSV.
Use the checksummed Julia archive and GitHub cache without changing the action allowlist. Preserve the full test suite and assert bootstrap pin equivalence; omit only fork coverage upload. Export all ALDEx2 statistics in the CSV.
Run the complete pinned WebUI suite against CompositionalDA 480b10b. This is a fork-only development dependency pending registration.
Show the natural-log estimate alongside its natural-log standard error. Refuse out-of-range integer conversions explicitly, with BigInt and Float64 regression cases.
Run the complete pinned WebUI suite against CompositionalDA bf84ba0, including the reference-compatible variance classes and their tie handling.
Validate the audited package candidate, seed and Monte Carlo bounds, malformed route methods, and CSV round trips including the documented R reader.
Pin the completed rereview candidate and require the three-taxon ANCOM-BC request to return the documented 422 refusal.
Codex Review Summary: ❌ FailedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
The branch had narrowed the upstream workflow to fit a fork-local candidate: a push trigger naming this branch, a hand-rolled Julia bootstrap replacing the pinned setup action, a private package checkout developed into the project, and coverage upload removed. None of that can be proposed upstream, and removing coverage is what cost this branch its patch report. The workflow is now identical to upstream main. The native methods need the CompositionalDA package, which is not in the General registry yet: Project.toml names it and the resolved Manifest entry has to arrive with its registration, so the module loads without it and the two methods that need it refuse by name. test/unit/test_differential_native.jl also needs that package to run; the dependency and its resolved Manifest are the outstanding step for this PR. Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
`Pkg.instantiate()` failed in CI ("Julia tests": Instantiate Julia project),
so nothing downstream of it ran. `Project.toml` declared `CompositionalDA`,
which is not in the General registry and has no Manifest entry to resolve
against: the declaration alone is enough to make resolution fail for every
checkout, CI included.
The module already imports the package opportunistically, so the declaration is
what has to go. It is replaced by a note in `Project.toml` recording why it is
absent and what has to arrive with it (the dependency, its `[compat]` bound and
the regenerated `Manifest.toml`, in one change) once it is registered.
`compositional_da_available()` is exported so callers and tests can ask the
question the guard answers, and the refusal message now says where the package
comes from instead of pointing at a `Project.toml` entry that no longer exists.
The input checks (retained taxa, Int range) now run before the dependency
probe, so a malformed matrix is refused for that reason whether or not the
package is installed.
Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
`test_differential_native.jl` began with `import CompositionalDA`, so the unit suite could not load at all without a package CI cannot install, and the route test in `test_differential.jl` asserted a 200 from a method that could not run. Both now branch on `compositional_da_available()`: - The configuration boundary fuzz, the oversize-count refusal and the constructor errors run everywhere. - Without the package, the refusal is what is tested: both native methods raise an `ArgumentError` naming `CompositionalDA` and pointing at `nb_glm`, and the route answers 400 `invalid_input` with that message rather than a 500 or a table of numbers no model produced. - With the package developed into the environment, the adapter and ANCOM-BC comparisons run unchanged against it. The skips announce themselves (`@info`) the way the R- and glmGamPoi-dependent testsets in this file already do, so a silent gap is visible in the log. Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
The web-interface guide listed only `nb_glm` and `clr_welch`, so `aldex2` and `ancombc` were reachable through config and the UI without being described. It now names both, says what they compute and which settings drive them (`mc_samples`, `seed`), and states up front that they need `CompositionalDA`, which is not installable yet, so the two methods refuse by name until it is developed into the environment. Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
…instantiate (#314) ## Change and reason `Julia tests` was failing on #70 at **Instantiate Julia project**, so every step after it — RCall, the suite, coverage — was skipped. The cause is a single declaration: `Project.toml` named `CompositionalDA` (`bb1787b7-…`) in `[deps]` and `[compat]`, but the package is **not in the General registry** and there is no `Manifest.toml` entry to resolve it against. `Pkg.instantiate()` therefore cannot resolve the project and exits 1 on *every* checkout, CI included — before any test runs. The module already imports the package opportunistically (`_COMPOSITIONAL_DA_AVAILABLE`), so the declaration is the only thing that has to go. This PR removes it and keeps the feature intact behind that guard: - **`Project.toml`** — the declaration is gone, replaced by a comment recording why it is absent and what must land together when it is registered (dependency + `[compat]` bound + regenerated `Manifest.toml`, in one change). - **`src/analysis/differential.jl`** — the refusal message no longer points at a `Project.toml` entry that no longer exists; `compositional_da_available()` is exported so callers (and tests) can ask the question the guard answers; the input checks (retained taxa, `Int` range) now run *before* the dependency probe, so a malformed matrix is refused for that reason whether or not the package is installed, on every machine. - **tests** — `test_differential_native.jl` began with `import CompositionalDA`, so the unit suite could not load at all without a package CI cannot install. Both native test files now branch on `compositional_da_available()`: the boundary fuzz, the oversize refusal and the constructor checks always run; without the package the *refusal* is what is asserted (both methods raise `ArgumentError` naming `CompositionalDA`, the route answers 400 `invalid_input` rather than a 500 or a table no model produced); with the package developed into the environment the adapter and ANCOM-BC comparisons run unchanged. Skips announce themselves with `@info`, like the existing R- and glmGamPoi-gated testsets. - **`docs/guide/web-interface.md`** — documents `aldex2`/`ancombc`, `mc_samples`/`seed`, and the package caveat the guide was missing. No application logic changes: the estimators, their settings and their results are untouched. ## Validation The fork's action policy blocks `julia-actions/*` (verified: the dispatch fails with *"…are not allowed in hyperpolymath/MetaManifold-WebUI because all actions must be from a repository owned by hyperpolymath, created by GitHub, verified in the GitHub Marketplace…"*), so upstream's `ci.yml` cannot start here. The change was validated with a throwaway policy-compliant job on the same commit that reproduced the two steps that matter: - **`Pkg.instantiate()`** — `success` (this is the step that failed in #70). Julia 1.12.5, R installed, RCall rebuilt against it. - **`julia --project=. test/runtests.jl test_differential test_differential_native`** — `success`: **1013 passed, 0 failed, 18 skipped (`@test_skip`)**. - `Native configuration boundary fuzz` — 790 - `Native input boundaries do not depend on the package` — 5 - `Native methods refuse by name when the package is absent` — 8 - `Route: native method override and input refusal` — 16 (1 skipped: the adapter half) - `Native compositional DA adapter`, `ANCOM-BC adapter…` — skipped, package absent The throwaway job did not restore `renv`, so `glmGamPoi` was absent; those five testsets fail by contract under `CI=true` when glmGamPoi is missing (issue #37), so the job ran with `CI=false` to have them skip loudly. In real CI they run — `renv.lock` installs glmGamPoi. Frontend gates were run locally on this branch: `bun install --frozen-lockfile`, `bun run build` and `bun test src` (68 pass, 1 skip, 0 fail). **Not run here:** the full CI job (DADA2/PR2/R suite, Agda, Codecov). Nothing in this diff touches them. ## Scope Follow-up, deliberately out of scope: activating the native methods for real. That needs either `CompositionalDA` registered in the General registry, or a `[sources]` git dependency — either way with the regenerated `Manifest.toml` in the same change. Until then `aldex2`/`ancombc` are wired, documented and refused by name. Lockfiles: `Manifest.toml` and `renv.lock` are untouched; `bun.lock` is untouched. ## Contribution checks - [x] I followed [CONTRIBUTING.md](https://github.com/JoshuaJewell/MetaManifold-WebUI/blob/main/CONTRIBUTING.md). - [x] This branch starts at current upstream main and contains no merges from fork main. - [x] Every commit is signed and shows as Verified. - [ ] CI has run and passes — it has not run yet: this branch is based on `validation/issue-23-native-da`, not `main`, so `ci.yml`'s `pull_request: branches: [main]` does not trigger. Merging this into #70's branch and re-running there is the intended path. - [x] Existing licensing, citation and acknowledgement text is unchanged.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
3 of 5 tasks
… (closes the 30 uncovered lines on upstream PR 70) (#319) ## Change and reason Codecov reported 52.38% patch coverage on [JoshuaJewell#70](JoshuaJewell#70), with 30 lines missing. All 30 lines are in `src/analysis/differential.jl`. They are the adapter that turns a CompositionalDA result into result rows. The cause is real. CompositionalDA is not in the General registry, so CI cannot install it. In CI, only the refusal path ran. This change makes the adapter reachable in CI: - `differential_abundance(...; native_backend=nothing)` calls a module. The default is the `CompositionalDA` that the session loaded, or the by-name refusal when the session loaded none. Production behaviour does not change. - `_is_composition_error` translates the `CompositionError` of the backend in use. - `diagnostics.native_method.package` reports the name of the module that produced the numbers. A record from the stand-in says `NativeDAStub`, so it cannot read as a record from the package. - `test/support/native_da_stub.jl` is a stand-in with the two entry points, the column names and the verdict strings of the package. Its `qvalue` is not `bh_adjust(pvalue)`, so a second BH pass is visible. Its structural rows carry NaN, as the package leaves them. - `test/unit/test_differential_native.jl` gains four testsets that run on every checkout: the seam, the ALDEx2 wiring, the ANCOM-BC wiring and the refusal order. The comparisons against the real package stay. They still skip with a message when the package is absent. This pull request targets the branch of upstream PR 70. A merge here updates that pull request. ## Validation Julia 1.12.5, R 4.3.3 (Ubuntu 24.04 `r-base-core`), all commands from the repository root. 1. Coverage, with the same flags as CI: ```bash julia --project=. --code-coverage=user --compiled-modules=no test/runtests.jl differential differential_native ``` Result: 1159 pass, 13 skipped, 0 fail. I compared the `.cov` file with `git diff` against the merge base with upstream `main` (`89be534`). Every instrumented line that this branch adds to `src/analysis/differential.jl` is covered: 52 of 52. 2. Real package. In a scratch copy I ran `Pkg.develop` on `hyperpolymath/CompositionalDA.jl` at `9903e76` (v0.3.0) and ran the same command. Result: 1367 pass, 11 skipped, 0 fail. The two real-package testsets ran and agreed with the adapter. 3. Full unit suite: `julia --project=. -t 2 test/runtests.jl`. Result: 3618 pass, 25 skipped, 1 error. The error is `test_provenance.jl:479`: "package 'dada2' is not installed in the R library in use". My sandbox does not have the R packages that `renv.lock` installs in CI. The test does not touch this change. 4. Planted mutants. I run 12 deliberate corruptions of the adapter against `test/runtests.jl differential_native`. The run is in progress. I will add the result here before I mark this pull request ready. Not run: the integration tests, the server tests, the frontend tests, and the upstream CI itself. Codecov runs on the upstream pull request only, so the Codecov number is not confirmed until PR 70 runs again. ## Scope - No change to `Project.toml`, `Manifest.toml`, `renv.lock`, `codecov.yml` or any workflow. - The stand-in tests the wiring of the adapter. It does not test the estimators. The real-package testsets do that, where the package is installed. - An earlier draft of this work also proposed a patch-coverage gate, a sensitivity test and three estate workflows for the upstream repository. I left them out. They are separate decisions for the upstream owner. ## Contribution checks - [x] I followed [CONTRIBUTING.md](https://github.com/JoshuaJewell/MetaManifold-WebUI/blob/main/CONTRIBUTING.md). - [x] This branch starts at current upstream main and contains no merges from fork main. (It starts at the head of PR 70, `be7792f`.) - [ ] Every commit is signed and shows as Verified. (The managed signing identity decides this. See the commit badge.) - [ ] CI has run and passes. (Pending.) - [x] Existing licensing, citation and acknowledgement text is unchanged. --- _Generated by [Claude Code](https://claude.ai/code/session_0136P7ZoTPXfxg1C85rVNx78)_ Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
hyperpolymath
added a commit
to metadatastician/MetaManifold-Evidence
that referenced
this pull request
Nov 10, 2026
## What this changes The notes for upstream [JoshuaJewell/MetaManifold-WebUI#70](JoshuaJewell/MetaManifold-WebUI#70) said that the two patches were never run. That is no longer true for the first patch. - `notes/0004-pr70-native-adapter-test-seam.patch` is now the commit that was run and pushed: `3ed1dfb`, open as draft [hyperpolymath/MetaManifold-WebUI#319](hyperpolymath/MetaManifold-WebUI#319). - `notes/pr70-coverage-and-cicd.md` has a new status section at the top. It records the measured results, the changes against the first draft, and why PR 70 has no Codex review and no governance comment. - `notes/README.md` marks `0005-pr70-coverage-gates-and-estate-lanes.patch` as not applied, never run, and stale against the new `0004`. - The word `ponsbot` is corrected. No such fleet member exists in gitbot-fleet or in standards. pons asinorum is a built-in row of the Hypatia grid. ## Measured results recorded in the note | check | result | | --- | --- | | patch line coverage of `src/analysis/differential.jl`, CI flags | 52 of 52 added lines covered | | real CompositionalDA v0.3.0 developed into a scratch copy | 1367 pass, 11 skipped | | full unit suite | 3618 pass, 25 skipped, 1 error (needs the R package `dada2`, absent in the sandbox) | | planted mutants | 12 of 12 killed | ## Not changed The `0005` patch file itself. It stays as the record of the first draft. --- _Generated by [Claude Code](https://claude.ai/code/session_0136P7ZoTPXfxg1C85rVNx78)_ Co-authored-by: Claude <noreply@anthropic.com>
hyperpolymath
added a commit
to metadatastician/MetaManifold-Evidence
that referenced
this pull request
Nov 10, 2026
…verage (#17) ## What this changes Follow-up to [#16](#16). That note said the WebUI change was open as a draft. The change is now merged, and the upstream result is known. - `notes/pr70-coverage-and-cicd.md`: [hyperpolymath/MetaManifold-WebUI#319](hyperpolymath/MetaManifold-WebUI#319) is merged. The head of upstream [JoshuaJewell/MetaManifold-WebUI#70](JoshuaJewell/MetaManifold-WebUI#70) is `1832f5c`. - The upstream `CI` run passed at that head. - Codecov reports patch coverage 100% (66 of 66 lines, 0 missing; it was 33 of 63) and project coverage 75.88% (base 75.73%). Source: the public Codecov API for PR 70, read at 2026-11-10 20:25 UTC. - `notes/README.md`: the index row for the `0004` patch says the same. Two files change. No patch file changes. --- _Generated by [Claude Code](https://claude.ai/code/session_0136P7ZoTPXfxg1C85rVNx78)_ Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Change and reason
Validation
Scope
Contribution checks