Skip to content

Tidy versioning & cross-platform install setup (Linux/macOS/Windows) - #2

Closed
btgaskin wants to merge 7 commits into
mainfrom
chore/ci-and-versioning
Closed

Tidy versioning & cross-platform install setup (Linux/macOS/Windows)#2
btgaskin wants to merge 7 commits into
mainfrom
chore/ci-and-versioning

Conversation

@btgaskin

Copy link
Copy Markdown
Owner

Summary

  • Fixes a real tag/version defect: v0.1.0 was pushed pointing at a commit where Project.toml still said 0.0.1 — bumped to 0.1.0 to match.
  • Adds missing [compat] bounds to bench/, profile/, and examples/templates/new_project/ (previously unconstrained), and starts tracking bench/Manifest.toml (was gitignored, not just stale — so bench/ had no pin at all).
  • Regenerates root/bench/profile manifests under Julia 1.10.11 — the compat floor Project.toml has always claimed but had never actually been tested (no CI, ever).
  • Along the way, found and fixed a real bug this exposed: every NULL_MEASURED floor calibration anchor (wall/pong/pong_hitrate/forage) failed its atol=1e-12 equality check under Julia 1.10 vs. the hardcoded 1.12.6-measured anchors, because Julia's Random stdlib doesn't guarantee bit-exact reproducibility of a seed across Julia versions. Regenerated the anchors under 1.10.11 and widened the floor comparisons to atol=0.02 (analytic ceilings stay exact) so this survives ordinary cross-version RNG drift going forward.
  • Adds GitHub Actions CI (.github/workflows/CI.yml): a 6-job main matrix (Ubuntu/macOS/Windows × Julia 1.10/current stable), a compat-floor job that deletes Manifest.toml before instantiating to exercise the declared ranges directly, and a secondary-environments smoke job (bench/, profile/, the new-project template) across all three OSes.
  • Doc fixes: real clone URL (was a literal placeholder), and an honest "CI-tested on Ubuntu/macOS/Windows" line replacing a previously false musl/Alpine-unsupported claim.

This plan was independently reviewed twice by Codex (gpt-5.6-sol, xhigh) — once on the core versioning/CI defects, once focused specifically on Windows support — before implementation, and Codex implemented the bulk of the file/CI changes directly.

Test plan

  • julia +1.10 --project=. -e 'using Pkg; Pkg.instantiate(); Pkg.test()' passes clean
  • julia --project=. -e 'using Pkg; Pkg.instantiate(); Pkg.test()' (default 1.12.6) passes clean against the same regenerated manifest
  • bench/ and profile/ instantiate and load BrainlessLab under Julia 1.10
  • CI itself goes green on this PR (6 main-matrix + 1 compat-floor + 3 smoke = 10 jobs) — first real run
  • After merge: move v0.1.0 tag to the commit on main that carries version = "0.1.0" (deliberately not done in this PR — needs to point at post-merge history)

🤖 Generated with Claude Code

btgaskin added 7 commits July 10, 2026 05:47
Project.toml still said 0.0.1 at the commit the v0.1.0 tag points to.
Nobody has consumed the tag yet, so bring the file forward instead of
leaving the mismatch in place.
…nifest.toml

bench/Project.toml and profile/Project.toml declared [deps] with no
[compat] section at all, so Pkg.instantiate() there was unconstrained.
bench/Manifest.toml was also gitignored (not just stale), unlike
profile/'s committed one -- align it with the same pinned/reproducible
pattern root and profile/ already use.
…loor)

Root, bench/, and profile/ Manifest.toml were all resolved on Julia
1.12.6, while Project.toml has always claimed julia = "1.10" -- a floor
that had never actually been exercised (no CI, ever). Regenerated all
three from Project.toml under Julia 1.10.11 and confirmed Pkg.test()
passes at that floor as well as under 1.12.6.
Regenerating manifests under Julia 1.10 surfaced a real bug: every
NULL_MEASURED floor anchor (wall, pong, pong_hitrate, forage) failed
its atol=1e-12 equality check against the hardcoded anchor constants,
because Julia's Random stdlib doesn't guarantee a fixed seed reproduces
bit-exactly across Julia versions. These anchors are empirical
null-baselines (not tied to a numpy oracle), so: regenerate them using
the values measured under Julia 1.10.11 (git dc04918), and widen the
floor-vs-anchor comparisons to atol=0.02 to survive ordinary
cross-version RNG drift going forward. Analytic ceiling comparisons are
untouched at atol=1e-12 since those are deterministic.
…rent)

Repo has never had CI -- every packaging claim (compat floor, OS
support) was unverified. Three jobs: main matrix (3 OS x 2 Julia
versions), a compat-floor job that deletes Manifest.toml before
instantiating to exercise the declared [compat] ranges directly, and a
secondary-environments smoke job that instantiates bench/, profile/,
and the new-project template on all three OSes.
Matches the -C \$repo pattern src/run/Manifest.jl already uses, instead
of depending on whatever directory the process happens to be launched
from. Already non-fatal (falls back to "unknown"), so this is just
consistency, not a bug fix.
…adge

introduction.mdx had a literal placeholder clone URL. Both docs now
state what CI actually proves (Ubuntu/macOS/Windows, Julia 1.10 +
current stable) instead of a blanket, previously-false claim about
musl/Alpine support.
@btgaskin

Copy link
Copy Markdown
Owner Author

Closing as largely superseded; the one still-live fix has been carried into #8.

This branch is 44 commits behind agent/minimal-docs-benchmarks. Commit-by-commit against current HEAD:

Commit Status
20fa206 bump version to 0.1.0 superseded — Project.toml is now 0.2.0
452a56d compat bounds bench/profile/new_project mostly superseded — bench/Project.toml has [compat]; profile/Project.toml no longer exists
80fda97 regenerate manifests superseded
735fc1c tolerate cross-Julia RNG drift in floor anchors already presenttest/scoring_calibration.jl carries the VERSION == v"1.10.11" gate
081fd07 add CI workflow superseded — CI now runs five tiered suites with content-keyed proof caching
f8e4031 make Calibration's git SHA lookup cwd-independent carried into #8
a3b0dd3 docs: clone URL, CI platforms, badge partly live, folded into the #8 docs pass

f8e4031 was the real find and is now applied: _git_short_sha resolved git rev-parse --short HEAD against the process working directory, so a record's provenance SHA depended on where the process was launched. Now pinned with git -C $repo.

The tag/version mismatch this PR opened on (v0.1.0 pointing at a commit where Project.toml said 0.0.1) is moot at 0.2.0, but worth a clean tag at release.

@btgaskin btgaskin closed this Jul 25, 2026
btgaskin added a commit that referenced this pull request Aug 1, 2026
The calibration harness was broken three independent ways, all hidden
behind the runtests fail-fast:

- `_metric_value` was called in Calibration.jl but defined nowhere, so
  `calibrate_task` raised UndefVarError for every task.
- `configs/core_task_calibration.toml` was deleted in abc395d while
  calibration/core_tasks.jl still defaulted to it. Restored: it carries
  the tracking/pong roster and the blind/random/reference opportunity
  conditions.
- `_sim_score` was removed in the same commit along with the legacy
  sweep layer, but test/scoring_calibration.jl still called it. It was a
  wrapper turning `task_outcome`'s nothing into a NaN CSV row; the test
  now asserts the public contract directly.

Also resolves the provenance SHA against the package repository rather
than the process working directory, so a record's git_sha no longer
depends on where the process was launched (carried from PR #2).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.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