Skip to content

fix(analysis): load CompositionalModels and include clade_cumulus once - #277

Closed
hyperpolymath wants to merge 2 commits into
mainfrom
arena/2fe2daad-metamanifold-webui
Closed

hyperpolymath wants to merge 2 commits into
mainfrom
arena/2fe2daad-metamanifold-webui

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

main cannot load. src/analysis/differential.jl:36 imports CompositionalFit, CompositionalRefusal and RuntimeRefusal from ..CompositionalModels, and src/analysis/compositional.jl defines that module, but src/MetaManifold.jl never included it, so the package dies with

UndefVarError: `CompositionalModels` not defined in `MetaManifold`

at differential.jl:38 before any test runs (CI run 39873811778). The module is now included before differential.jl. It has no dependencies of its own, so it needs no other ordering constraint, and every name differential.jl imports from it is exported.

clade_cumulus.jl was included twice in the same block, which redefines a module rather than reusing it; Julia warns 'replacing module CladeCumulus' and re-runs every top-level definition. One include, in the same position, is enough.

Not changed: src/server/routes/cladistics.jl exists but is not included by src/server/server.jl, so its /api/v1/studies/{study}/cladistics endpoints are unreachable. Wiring it adds new routes, which is a behaviour change rather than a load fix, so it is left for whoever owns that feature.

Change and reason

Validation

Scope

Contribution checks

  • I followed CONTRIBUTING.md.
  • This branch starts at current upstream main and contains no merges from fork main.
  • CI has run and passes.
  • Existing licensing, citation and acknowledgement text is unchanged.

main cannot load. src/analysis/differential.jl:36 imports CompositionalFit,
CompositionalRefusal and RuntimeRefusal from ..CompositionalModels, and
src/analysis/compositional.jl defines that module, but src/MetaManifold.jl never
included it, so the package dies with

    UndefVarError: `CompositionalModels` not defined in `MetaManifold`

at differential.jl:38 before any test runs (CI run 39873811778). The module is
now included before differential.jl. It has no dependencies of its own, so it
needs no other ordering constraint, and every name differential.jl imports from
it is exported.

clade_cumulus.jl was included twice in the same block, which redefines a module
rather than reusing it; Julia warns 'replacing module CladeCumulus' and re-runs
every top-level definition. One include, in the same position, is enough.

Not changed: src/server/routes/cladistics.jl exists but is not included by
src/server/server.jl, so its /api/v1/studies/{study}/cladistics endpoints are
unreachable. Wiring it adds new routes, which is a behaviour change rather than
a load fix, so it is left for whoever owns that feature.

Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ⚠️ Failed 2026-10-25T08:29:17.222860Z
We couldn’t complete this review. Comment @codex review to try again.
0cdfafd New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 45 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: d0799e27-df92-4923-b8ef-fb435fd12ab5
Commits

Reviewing files that changed from the base of the PR and between f3816e5 and 0cdfafd.

Files selected for processing: 1
  • src/MetaManifold.jl
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@hyperpolymath
hyperpolymath enabled auto-merge (squash) October 25, 2026 08:19
@coderabbitai

coderabbitai Bot commented Oct 25, 2026

Copy link
Copy Markdown

Add Carrot credits or activate Agent usage billing to use Autofix

Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@sonarqubecloud

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

Fork governance

Lane Status Run
DEED syntax (repo deed) 🟢 conformant run 40176806854
K9 conformance (L0–L2; L3 not verified) green (job: success) same run
Hypatia verdict grid purple (job: success) same run

Hypatia grid purple

🟣 critical · commit 0cdfafda3b17 · run 40176806854

Reporter Status Critical High Medium Minor Since previous revision
Hypatia scan 🟣 critical 18 29 28 0 — no comparable baseline
panic-attack assail 🔴 high 0 7 1 0 — no comparable baseline
pons asinorum 🟢 clean 0 0 0 0 — no comparable baseline
rhodibot (RSR compliance) 🟠 indeterminate 0 0 0 0 — no comparable baseline
panicbot (panic recovery, error handling) 🟠 indeterminate 0 0 0 0 — no comparable baseline
echidnabot (formal verification: proofs/) 🟠 indeterminate 0 0 0 0 — no comparable baseline
seambot (integration health: API routes) 🟠 indeterminate 0 0 0 0 — no comparable baseline
finishingbot (release readiness) 🟠 indeterminate 0 0 0 0 — no comparable baseline
accessibilitybot (WCAG on the React UI) 🟠 indeterminate 0 0 0 0 — no comparable baseline
glambot (presentation quality) 🟠 indeterminate 0 0 0 0 — no comparable baseline
cipherbot ⚪ not applicable 0 0 0 0 — no comparable baseline
sustainabot ⚪ not applicable 0 0 0 0 — no comparable baseline
Hypatia scan: 75 finding(s)
  • critical cicd_rules/banned_language_file — frontend/src/utils/text.test.ts — TypeScript file detected -- banned language
  • critical cicd_rules/banned_language_file — frontend/src/cladistics/cumulativeLayout.ts — TypeScript file detected -- banned language
  • critical cicd_rules/banned_language_file — frontend/src/cladistics/cumulativeLayout.test.ts — TypeScript file detected -- banned language
  • critical cicd_rules/banned_language_file — frontend/src/api/ijsonJcs.ts — TypeScript file detected -- banned language
  • critical cicd_rules/banned_language_file — frontend/src/api/ijsonJcs.test.ts — TypeScript file detected -- banned language
  • critical cicd_rules/banned_language_file — frontend/src/components/ordinationModel.test.ts — TypeScript file detected -- banned language
  • critical cicd_rules/banned_language_file — frontend/src/components/ordinationModel.ts — TypeScript file detected -- banned language
  • critical cicd_rules/banned_language_file — scripts/tests/test_null_calibration_failures.py — Python file detected -- banned language
  • critical cicd_rules/banned_language_file — scripts/tests/test_format_readiness.py — Python file detected -- banned language
  • critical cicd_rules/banned_language_file — scripts/formats/process.py — Python file detected -- banned language
  • critical cicd_rules/banned_language_file — scripts/formats/probe_kyq.py — Python file detected -- banned language
  • critical cicd_rules/banned_language_file — scripts/formats/descendants.py — Python file detected -- banned language
  • critical cicd_rules/banned_language_file — scripts/formats/inventory.py — Python file detected -- banned language
  • critical cicd_rules/banned_language_file — scripts/formats/conformance.py — Python file detected -- banned language
  • critical cicd_rules/banned_language_file — test/references/check_ordination_references.py — Python file detected -- banned language
  • critical cicd_rules/banned_language_file — test/references/check_high_precision_references.py — Python file detected -- banned language
  • critical cicd_rules/banned_language_file — test/references/exact_summary_reference.py — Python file detected -- banned language
  • critical cicd_rules/banned_language_file — bench/null_calibration/report_failures.py — Python file detected -- banned language
  • high code_scanning_alerts/CSA001 — frontend/src/utils/text.test.ts — Code scanning (Hypatia): hypatia/cicd_rules/banned_language_file -- Hypatia cicd_rules: banned_language_file -- 5 day(s) old
  • high code_scanning_alerts/CSA001 — test/references/exact_summary_reference.py — Code scanning (Hypatia): hypatia/cicd_rules/banned_language_file -- Hypatia cicd_rules: banned_language_file -- 2 day(s) old
  • 55 more; see the structured report in the artifact.
panic-attack assail: 8 finding(s)
  • high DynamicCodeExecution — src/pipeline/dada2/context.jl — eval/Meta.parse in src/pipeline/dada2/context.jl
  • high DynamicCodeExecution — src/analysis/analysis.jl — eval/Meta.parse in src/analysis/analysis.jl
  • high DynamicCodeExecution — src/analysis/differential.jl — eval/Meta.parse in src/analysis/differential.jl
  • high DynamicCodeExecution — src/analysis/ordination.jl — eval/Meta.parse in src/analysis/ordination.jl
  • high DynamicCodeExecution — src/core/provenance.jl — eval/Meta.parse in src/core/provenance.jl
  • high DynamicCodeExecution — scripts/check-julia-syntax.jl — eval/Meta.parse in scripts/check-julia-syntax.jl
  • high DynamicCodeExecution — test/unit/test_permanova.jl — eval/Meta.parse in test/unit/test_permanova.jl
  • medium UnsafeFFI — src/core/memory_probe.jl — 3 ccall/FFI calls in src/core/memory_probe.jl
rhodibot (RSR compliance): not_run — enrolled, but no report-back was received
  • 🟠 indeterminate: enrolled, but no report-back was received
panicbot (panic recovery, error handling): not_run — enrolled, but no report-back was received
  • 🟠 indeterminate: enrolled, but no report-back was received
echidnabot (formal verification: proofs/): not_run — enrolled, but no report-back was received
  • 🟠 indeterminate: enrolled, but no report-back was received
seambot (integration health: API routes): not_run — enrolled, but no report-back was received
  • 🟠 indeterminate: enrolled, but no report-back was received
finishingbot (release readiness): not_run — enrolled, but no report-back was received
  • 🟠 indeterminate: enrolled, but no report-back was received
accessibilitybot (WCAG on the React UI): not_run — enrolled, but no report-back was received
  • 🟠 indeterminate: enrolled, but no report-back was received
glambot (presentation quality): not_run — enrolled, but no report-back was received
  • 🟠 indeterminate: enrolled, but no report-back was received
cipherbot: not_applicable — no cryptography is implemented in this repository
  • ⚪ not applicable: no cryptography is implemented in this repository
sustainabot: not_applicable — fleet adapter slot reserved; no adapter exists yet (gitbot-fleet README)
  • ⚪ not applicable: fleet adapter slot reserved; no adapter exists yet (gitbot-fleet README)

Scope: static findings reported by each row's tool at the named commit. Purple, red, yellow and blue grade the worst finding present; orange is evidence missing, malformed or a scanner that did not run; grey is an explicit scope exclusion with its reason. No row is a security certification. report.json, badge.json and the raw findings are in the verdict-grid artifact on the linked run.

K9 L0–L2 green

🟢 conformant · commit 0cdfafda3b17 · run 40176806854 · validator hyperpolymath/standards@c6d78606f392

Category Status Pass Fail Indeterminate N/A Since previous revision
K9 contract typecheck 🟢 conformant 1 0 0 0 — no comparable baseline
K9 validator self-test 🟢 conformant 37 0 0 0 — no comparable baseline
K9 live corpus (L0–L2) 🟢 conformant 3 0 0 0 — no comparable baseline

Scope: K9 components L0–L2 against contract v1.0.0 at the named standards commit. L3 signature verification and routed coordination-dialect files are not certified. Green is limited to this scope. Orange is missing evidence; yellow is grandfathered debt or warnings; grey is an explicit scope exclusion. report.json, badge.json and the validator logs are in the k9-grid artifact on the linked run.

Copy link
Copy Markdown
Owner Author

Closed as superseded, not merged. This is a measurement, not a judgement about the work.

  • Branch: arena/2fe2daad-metamanifold-webui
  • Class from scripts/maintenance/triage-branches.sh: fresh
  • ahead 2, behind 0, merge base f3816e5a, merge commits 1
  • Files this branch has that main does not: 0

The load fix it proposes is already on main: src/MetaManifold.jl includes analysis/compositional.jl before analysis/differential.jl and includes analysis/clade_cumulus.jl once. All this branch would add is the explanatory comment, and arriving through a merge commit from main is what CONTRIBUTING.md rule 2 forbids. If the comment is still wanted it is a one-line pull request from the current tip, not a reason to keep a conflicting branch.

main is at f3816e5a. CONTRIBUTING.md rule 1 requires a branch to start at the tip of main and rule 2 forbids merge commits from it; this branch satisfies neither, so no run of CI could have made it mergeable. The new Branch freshness check (.github/workflows/pr-freshness.yml, running scripts/maintenance/check-pr-freshness.sh) now reports exactly these two facts within a minute of a push, so a branch in this state is caught while rebasing is still cheap.

Nothing is lost by closing this. A closed pull request keeps its head reachable at refs/pull/277/head:

git fetch origin pull/277/head:review/pr-277

The branch itself is deleted because 13 heads of the same shape are what made a fresh pull request impossible to pick out of the list. Background and the classification rules: docs/maintenance/repository-hygiene.md. Reopen this pull request, or open a new one from the current tip, if any of the commits above still applies.

auto-merge was automatically disabled October 25, 2026 08:44

Pull request was closed

@hyperpolymath
hyperpolymath deleted the arena/2fe2daad-metamanifold-webui branch October 25, 2026 08:44
hyperpolymath added a commit that referenced this pull request Oct 25, 2026
…les (#285)

## Change and reason

`main`'s remote held **fifteen heads**: `main`, the orphan data branch
the badge publisher force-pushes, and **thirteen branches cut from
snapshots between 5 and 119 commits old** — every one of them carrying
an open pull request. Six required contexts (`Julia tests`, `Agda
proofs`, `Code relevance`, `Occupancy relevance`, `Occupancy
disagreement test`, `Occupancy typed peak`) mean a branch in that state
reports `BLOCKED` indefinitely, so a reviewer saw thirteen blocked pull
requests and no signal about which of them was alive. Each also started
a full CI run that could never go green, which is the mechanism that
made the pile stable rather than self-correcting.

`CONTRIBUTING.md` already required a branch to start at the tip of
`main` (rule 1) and to carry no merge commits from it (rule 2). Nothing
enforced either sentence. This PR adds the enforcement, the measurement,
and the record — and nothing that deletes anything:

| Path | What it is |
| --- | --- |
| `scripts/maintenance/check-pr-freshness.sh` | Answers rules 1 and 2
from the merge base and the commit graph. Annotates the failure for the
checks API. Exits 2 rather than passing when it cannot judge. |
| `scripts/maintenance/triage-branches.sh` | Classes every remote head
as `base`, `unrelated`, `contained`, `fresh`, `salvage` or `stale`.
Read-only: `--format table\|markdown\|json`, `--fail-on`. |
| `.github/workflows/pr-freshness.yml` | Runs the freshness check on
pull request open, push, reopen and ready-for-review. |
| `.github/workflows/branch-hygiene.yml` | Weekly: runs the triage into
**one** rolling issue that updates in place and closes itself when no
drifted branch remains. A job that opens an issue every week is the
mechanism that produced the pile it is meant to clear. |
| `scripts/tests/test-*.sh` | Fixture-repository tests for both scripts:
merged, drifted-with-nothing-new, drifted-with-a-file-the-base-lacks,
orphan, unrelated history, shallow, and the Actions annotation path.
Wired into the `Advisory scan contract` job beside the other shell
tests. |
| `docs/maintenance/repository-hygiene.md` | The classes, what happens
to each, the recovery path, the 2026-10-25 measurement, the order the
work was done in, and the four decisions left to the owner. |
| `CONTRIBUTING.md`, `.gitignore` | Points at the doc above;
`!docs/maintenance/` follows the existing whitelist pattern (`docs/*` is
ignored except published notes). |

Two things both scripts refuse to do, because a wrong answer is worse
than none: report on a **shallow clone** (it reports its graft point as
the merge base, which makes every branch look `fresh`), and delete
anything. `governance-badges` is classed `unrelated` and left alone — it
is an output, not a spare branch: `README.md` reads it through
`img.shields.io/endpoint`.

## Work already done on the remote with these scripts

The cleanup is not in this diff, because it is not a file change.
Measured, then closed, then the branch deleted — in that order, so each
pull request keeps its head reachable at `refs/pull/<n>/head`:

- **contained** (`ahead` 0, nothing to merge): #283, #281.
- **stale** (behind, adds no file `main` lacks): #284, #280, #279, #278,
#274.
- **fresh but a duplicate**: #277 — its load fix is already on `main`,
and it arrived through a merge commit, which rule 2 forbids.
- **salvage** (behind, holds files `main` lacks — closed, not merged,
because a merge would revert the 119 commits in between): #276 (Full
Evidence Mode, parked by the absorption register per #7), #272, #270,
#269 (placement-LWR `ComputingNote.tsx` + threshold test), #271
(evidence-27 review docs).

Every close comment carries its own branch's numbers and the `git fetch
origin pull/<n>/head` recovery command. The remote is now `main` +
`governance-badges`; `triage-branches.sh` reports 2 heads, 0 stale.

## Validation

Run here, on this branch:

```
bash scripts/tests/test-triage-branches.sh        # 13 passed, 0 failed
bash scripts/tests/test-check-pr-freshness.sh     # 11 passed, 0 failed
bash scripts/check-governance-contract.sh         # 70 checks passed
bash scripts/tests/test-governance-contract.sh    # all mutations rejected
bash scripts/tests/test-scanner-boundaries.sh     # ok
bash scripts/tests/test-ci-logging.sh             # ok
bash scripts/ci/check-shell-secrets.sh            # no credentials in tree or history
bash scripts/lint-sonar-reliability.sh            # OK: no S2871 or S7758 in frontend/src
bash scripts/maintenance/triage-branches.sh       # 2 heads after the cleanup
bash scripts/maintenance/check-pr-freshness.sh    # OK: at the base tip, no merge commits
```

Both new workflows were parsed as YAML and their embedded shell
extracted and checked with `bash -n`; the rolling-issue upsert was
exercised against a stub `gh` for all three paths (create, update,
close). **Not run:** the Julia suite and the frontend suite — neither is
touched by this diff, and neither can run in this sandbox; CI is the
first execution of anything in this PR on a runner.

## Scope

Deliberately not done, each recorded in
`docs/maintenance/repository-hygiene.md` under *Decisions for the
owner*:

1. **`Branch freshness` is not a required context yet.** It cannot be: a
required check that no workflow produces blocks every pull request,
including the one that would add it. Add it to the `Branch-Floor`
ruleset after this merges.
2. **Push-run concurrency on `main` is untouched.** `cancel-in-progress:
false` for pushes serialises the queue — at the time of measurement the
run for `a3a4a8e` was still going and the run for `f3816e5a` had not
started 25 minutes later. Changing it trades a per-commit result for
latency; that is the owner's call, not a CI fix I should make silently.
3. **The SonarCloud gate is untouched.** It failed on most of those pull
requests with `C Security Rating on New Code`, is not a required
context, and is already documented in `docs/sonar-quality-gate.md`. It
was a symptom of the huge stale diffs, not a defect in this repository.
4. **`docs/milestones/02-deferred-issues.md` is referenced by issue #4
and absent from `main`.** The pre-sync archive had it. Restoring it
re-adds content that overlaps `docs/statistics/method-catalogue-v1.md`;
editing the issue's reference may be the better answer.

No lockfile, dependency, generated or vendored file changes.

## Contribution checks

- [x] I followed [CONTRIBUTING.md](../CONTRIBUTING.md).
- [x] This branch starts at current upstream main and contains no merges
from fork main (`merge base f3816e5` = `main` tip).
- [x] CI has run and passes — the branch's first CI run is this pull
request.
- [x] Existing licensing, citation and acknowledgement text is
unchanged.

---------

Co-authored-by: Arena Agent <agent@arena.ai>
Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
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.

1 participant