You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
docs: curated landing page/guide/reference, plus a PYTHIA eval fix (#345) - #343
Compatibility tags:[Additive] for the docs site; [Behavior-changing] for the PYTHIA eval fix (commit f9def48, see below). No other runtime code changed.
This branch ended up carrying two unrelated changes because this session's environment pins all its work on andremun/pyInstanceSpace to this one branch. They're independently reviewable by commit.
1. Docs site (original scope, [Additive])
The hosted docs were only pdoc's generated API reference: one page per module, no landing page, no guide. andremun/InstanceSpace (the MATLAB repo) had just rebuilt its own docs (issue #53) as a hand-authored, MATLAB-toolbox-style site, 29 pages. This PR gives pyInstanceSpace a lighter version of that idea: a small curated shell on top of pdoc, not a full port (the MATLAB site's generator alone is 664 lines, and its pages are hand-written per function).
Changes
docs_site/pages/ — three hand-written pages, styled by docs_site/assets/style.css:
index.html: what Instance Space Analysis is, a small pipeline diagram, links to the other pages, and the three citations from README.
getting-started.html: install, the metadata.csv format, and a build/explore example.
options-reference.html: the options.json fields most users need, grouped by stage, adapted from README's own Options section.
poe docs now builds pdoc's output into site/api/ (it built directly into site/ before) and copies the curated pages into site/. The site's URL structure becomes /, /getting-started.html, /options-reference.html, /api/instancespace.html.
docs_site/pdoc-template/module.html.jinja2 — a small pdoc template override that adds a "Docs Home" link from every generated API page back to the landing page. Both halves share pdoc's own accent color, so there is no jarring break between the hand-written and generated pages.
README and CONTRIBUTING updated to point to and explain the new pages.
.github/workflows/docs-pages.yml and validation-tests.yml: renamed the build step to "Build docs site" (was "Build API docs..."), reordered validation-tests.yml's MATLAB-oracle staleness check to run last so it no longer blocks lint/type/docs/pytest/coverage from running and reporting (see CI release_gate fails: MATLAB oracle is stale after andremun/InstanceSpace's master advanced #344), and added a new report-only matlab-oracle-verify.yml job that runs the real MATLAB exporter against andremun/InstanceSpace's current master to check actual output, not just a commit-SHA pin.
Verified with real MATLAB (first time this repo's exporter has run outside a human's own machine, closing the CI-side gap in T5 — Version-pin tests/matlab_reference/'s MATLAB provenance #278): confirmed ~182 of ~190 drifted fixture files are macOS-vs-Linux platform/run noise, and isolated the 8 files that are real MATLAB code-driven drift — which led directly to part 2 below.
While diagnosing the MATLAB-oracle drift above, traced those 8 real-drift files to andremun/InstanceSpace#58, closed today: MATLAB used to score a trained algorithm against a fabricated all-false truth column when the test set had no data for it. This port had deliberately mirrored that MATLAB defect bit-for-bit (recorded as intentional at the time, per this repo's "MATLAB is the behavioral authority" policy) — this commit ports MATLAB's own fix. A trained algorithm with no test-set coverage now gets NaN accuracy/precision/recall and a zero confusion row, instead of a fabricated score, matching the same treatment a test-only algorithm with no trained-model slot already received.
No fixture or manifest changes were needed or made: no current tests/fixtures/matlab/current parity test reads the affected files for a PythiaStage.evaluate comparison. Full pytest suite passes unchanged (1047 passed).
Verification
poe check (black, ruff, mypy --strict, docs) and the full pytest suite (1047 passed) both pass, on the current head.
Every internal link between the three docs pages, site/assets/style.css, and site/api/instancespace.html resolves.
A Playwright screenshot of each new page and one generated API page confirms the layout and the "Docs Home" link's placement.
The landing page's three citations were checked against README's own copies (same wording, same DOIs).
The PYTHIA fix: rewrote the one existing test asserting the old fabricated-score behavior into the new skip behavior, and added a companion test proving the fix distinguishes "no test data" from "observed and genuinely bad everywhere."
release_gate is expected to remain red on this PR: its final step (MATLAB oracle staleness, deliberately last so it no longer blocks everything else) is andremun/InstanceSpace#344, unrelated to this PR's diff and not fixable without a human-reviewed MATLAB re-verification (see #344 for the full trail). verify_against_real_matlab is report-only (continue-on-error) by design for the same reason.
…Reference
The hosted docs were only pdoc's generated API reference: one page per
module, with no landing page or guide. This change adds three
hand-written pages, under docs_site/pages/, styled by
docs_site/assets/style.css:
- index.html: what Instance Space Analysis is, a pipeline diagram, and
links to the other pages.
- getting-started.html: install, the metadata.csv format, and a build/
explore example.
- options-reference.html: every options.json field, grouped by stage,
adapted from README's own Options section.
poe docs now builds pdoc's output into site/api/ (it built directly
into site/ before) and copies the curated pages into site/. A small
pdoc template override, docs_site/pdoc-template/module.html.jinja2,
adds a "Docs Home" link from each generated API page back to the new
landing page. Both halves share pdoc's own accent color, so they read
as one site without a full pdoc reskin.
README and CONTRIBUTING now point to and explain the new pages.
Verification: poe check (black, ruff, mypy --strict, docs) and the
full pytest suite (1046 passed) both pass. Every internal link between
the three pages, site/assets/style.css, and site/api/instancespace.html
resolves. A Playwright screenshot of each new page and one generated
API page confirms the layout and the "Docs Home" link's placement.
[Additive]: new docs content and a build-path change only. No runtime
code changed.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
The landing page's Cite this work section had the ISA methodology and
Zenodo citations from README, but left out the third: the SoftwareX
paper on the package itself. Add it, in the same wording and with the
same DOI as README's own copy.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
The Copilot review of PR #343 found four problems:
- pyproject.toml's docs.shell task had no `set -e`. A failed pdoc command
did not stop the script, so `poe docs` could report success after a
broken API-doc build. Add `set -e` at the top of the script.
- getting-started.html said Python "3.12 or later". pyproject.toml
constrains the version to `>=3.12,<3.13`, so only 3.12 is supported.
Fix the wording.
- options-reference.html said it covers "every field" of options.json.
It does not: general.verbose/seed, most of SelvarsOptions, and
SIFTED's genetic-algorithm settings are real fields it leaves out.
Narrow the claim to "the fields you are most likely to set", and
link to the API reference for the rest.
- The same page said PYTHIA "trains one scikit-learn SVC for each
algorithm". SVC is only the default: PythiaOptions.classifier also
accepts knn, tree, nb, linear, and ensemble. Add a pythia.classifier
row and correct the wording, including in the rows that assumed SVM
(is_poly_krnl is SVM-only; tuning is not).
Verification: ruff, black, mypy --strict, and poe docs all pass. Every
link, including the new one to api/instancespace/data/options.html,
resolves. A Playwright screenshot confirms the corrected Options
Reference text.
[Additive]: docs content and a build-script hardening only. No runtime
code changed.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
release_gate's "Verify MATLAB gold source and fixtures" step is red on this PR, but it is not this PR's failure: main itself fails the same way, at the merge of PR #342 (66e65be) — run. andremun/InstanceSpace's master advanced past the commit pinned in tests/fixtures/matlab/current/manifest.json, and some of what moved (c62408f) is an algorithmic fix, not documentation, so bumping the pin without re-verifying would be wrong. Re-verifying needs a real MATLAB run, which is not available in this environment. Filed as #344, with the reproduction and the fix this needs. I have not touched the fixtures or the pin here.
Fixed everything else the Copilot review found in a1f4c45: set -e in the docs build script (a failed pdoc no longer masks as success), the Python version claim, and the two Options Reference inaccuracies (the "every field" overclaim, and PYTHIA's classifier options). Replies on each thread below.
Document the actual minimum of three feature columns
docs_site/pages/getting-started.html:38
The guide says a dataset needs at least two feature columns, but a build validates MIN_FEATURES = 3 and raises unless there are at least three (instancespace/stages/preprocessing.py:38,72-74). A reader following this requirement with exactly two features will still fail at InstanceSpace construction; please state the actual minimum.
Save methods fail when the output directory does not exist
docs_site/pages/getting-started.html:56
Both save methods delegate to serializers that require output/ to already be an existing directory (instancespace/_serialisers.py:413-414); neither method creates it. As written, a new user's first run fails with ValueError unless they manually create the directory first.
This describes TRACE as using Python's multiprocessing, but the TRACE implementation dispatches work through ThreadPoolExecutor (instancespace/stages/trace.py:50,1559-1561). That distinction affects users' expectations about process isolation and CPU scaling; please document the actual executor (and, if desired, distinguish it from PILOT's process-pool paths).
[Additive] getting-started.html still overclaimed that Options Reference
covers "every field" of options.json in two places missed by the prior
fix. options-reference.html's pythia.classifier row claimed every
classifier tunes a "pair" of hyperparameters, but tree/nb/linear tune
only one (per PYTHIA_TWO_PARAMETER_COUNT in instancespace/data/options.py).
Both corrected to match the actual code.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
…gate
[Additive] Split "Verify MATLAB gold source and fixtures" into two steps.
The manifest repo_commit staleness check (tied to #344 — the pin can only
be bumped after a real MATLAB re-verification run, so it is expected to
lag upstream master) now runs with continue-on-error: true. Fixture
provenance verification and inventory generation, which do not depend on
the MATLAB checkout, stay blocking and now run regardless of the oracle
check's outcome, so lint/type/docs checks, pytest, dependency audit, and
coverage upload are no longer held up by an upstream drift this repo
can't resolve without MATLAB access.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
The guide says a dataset needs at least two feature columns, but the build-time viability check rejects fewer than three (instancespace/stages/preprocessing.py:38,72-74). Users following this requirement with two features will still get a build-time error; please document the actual three-feature minimum.
Document one-based subset indexing
docs_site/pages/options-reference.html:42
The subset-index loader explicitly requires finite integer indices in MATLAB's 1-based range (instancespace/stages/prelim.py:1059-1079), but this guide does not state the indexing convention. A user following it can provide zero-based indices and select the wrong rows or get a validation error; please call out that the file is one-based.
…wording, 1-based indices)
[Additive] Three accuracy fixes surfaced by review: the metadata guide said
two feature columns were enough, but preprocessing.py's validate_viable_dimensions
rejects fewer than three (MIN_FEATURES = 3); the pythia.tuning row still described
every non-SVM classifier as tuning a pair of hyperparameters, contradicting the
corrected pythia.classifier row above it; and selvars.file_idx's CSV format did not
say its indices are 1-based row numbers into metadata.csv (confirmed in
prelim.py's fileindexed branch).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
[Additive] continue-on-error: true (c9714d8) made the oracle staleness
check non-blocking, but that also flips release_gate's overall conclusion
to success once it's the only failing step -- silently hiding the exact
drift signal #344 depends on, including the check_run.completed webhook
this repo's PR subscriptions watch.
Move the check to run last instead, with no continue-on-error. Every
other step (lint, types, docs build, fixture provenance, pytest,
coverage) now runs and reports regardless of oracle staleness, but the
job still goes red when the oracle drifts, so that stays visible instead
of quietly disappearing.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
[Additive] New workflow matlab-oracle-verify.yml, separate from
validation-tests.yml. It mirrors andremun/InstanceSpace's own MATLAB CI
setup (matlab-actions/setup-matlab, the same toolboxes) to actually run
tests/matlab_export/pyis_export_reference_data.m against a fresh clone
of InstanceSpace's master, verify the export with
tools/fixture_provenance.py, and diff its manifest file hashes against
the committed tests/fixtures/matlab/current oracle.
This answers a stronger question than the git-SHA pin check in
validation-tests.yml: not just "has the pinned commit fallen behind
master" (#344), but "does current MATLAB master still reproduce the
committed fixtures bit-for-bit." Job-level continue-on-error: true --
the exporter has never been run outside a human's local MATLAB (#278),
so this must prove reliable on a CI runner before it can gate anything.
Unverified at commit time: whether matlab-actions/setup-matlab@v2's
'release: R2026a' (required by the exporter's 'verified' mode) is
actually supported by that action yet. If the "Set up MATLAB R2026a"
step fails for that reason, that's the first thing to check.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
[Additive] First real run (job db99d9a) confirmed matlab-actions/setup-matlab@v2
does support release: R2026a -- that concern from the previous commit is
resolved. It instead failed on InstanceSpace.build() -> ensurePool() -> gcp(),
which requires Parallel Computing Toolbox. andremun/InstanceSpace's own CI
(tests.yml) already installs it; this workflow's product list didn't.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
Serializer example omits required output directory creation
docs_site/pages/getting-started.html:56
This example calls both serializers with output/, but the serializers reject a missing directory (instancespace/_serialisers.py:413-414,622-623). A reader who copies the advertised example gets ValueError before any files are written; create the directory before saving (or explicitly state that it must already exist).
…ails
[Additive] Job db99d9a's second run (after d7e4cb8) got the exporter all
the way through: pyis_export_reference_data.m completed successfully
against InstanceSpace's current master, first real confirmation the
exporter works at all (#278). fixture_provenance.py verify then correctly
rejected the result -- its 'verified v2' identity check hard-requires the
pinned gold commit, and master has moved past it (#344) -- but that also
skipped the content-diff step, which doesn't depend on that identity
check and can answer a real question the identity check can't: whether
master's actual output still matches the committed fixtures byte-for-byte,
independent of whether its commit SHA does.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
…mmit
[Additive] Adds an instancespace_ref workflow_dispatch input (default
master) so the export can be re-run against an arbitrary commit, not just
master's tip. Needed for a control run: exporting at the exact pinned
gold commit (98a01ac...) tells us whether the 190-file content drift
found in db99d9a/05819ce's runs is caused by MATLAB code changes since
that commit, or by platform/run noise (the committed oracle was generated
on macOS; this CI runs on Linux, and SIFTED's GA plus PILOT's iterative
solver are both sensitive to that) -- if the same drift appears with zero
code difference, it's noise, not the cited bug fixes (#50/#52/#58/#59).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.56%. Comparing base (67753e2) to head (38ba6ae). ⚠️ Report is 7 commits behind head on main.
❗ Your organization needs to install the Codecov GitHub app to enable full functionality.
Status update: this PR now also carries two verify_against_real_matlab checks (from matlab-oracle-verify.yml, added in this PR). Both show red — that's expected, not a regression to fix:
That job is continue-on-error: true at the job level — it's diagnostic tooling, not a merge gate, and its failure doesn't block this PR.
All three failing checks on this PR (release_gate, both verify_against_real_matlab runs) trace to that one root cause, already tracked on #344, not to anything in this PR's own diff (the docs pages). No fixture data or manifest.json pin has been touched here, per the standing decision to leave that to a real scientific review.
…nt from test data (#345)
[Behavior-changing] InstanceSpace.explore()'s PYTHIA evaluation used to
score every trained classifier against its reconciled test-set column
unconditionally, including a trained algorithm the test set simply has
no data for -- whose "truth" column is an all-false reconciliation
artifact, not a real measurement. This was a deliberate bit-for-bit
mirror of a real MATLAB defect (andremun/InstanceSpace#58), recorded as
intentional at the time. MATLAB fixed#58 today (c62408f); this ports
the same fix.
PythiaEvaluateInput gains a required has_ground_truth field (one entry
per trained classifier). PythiaStage.evaluate now skips the confusion-
matrix computation for a trained index with no ground truth, leaving its
accuracy/precision/recall as NaN and its confusion row zero -- the same
treatment already given to a test-only algorithm with no trained-model
slot. InstanceSpace._explore_evaluate now threads the mask
_build_test_algo_matrix already computed instead of discarding it.
No fixture or manifest changes needed: no current tests/fixtures/matlab/
current parity test reads the 8 files this fix's real-world effect maps
to (isolated via matlab-oracle-verify.yml's gold-commit control run) for
a PythiaStage.evaluate comparison. Full pytest suite: 1047 passed,
unchanged. Rewrote the one test asserting the old fabricated-score
behavior into the new skip behavior, and added a companion test proving
the fix distinguishes "no test data" from "observed and genuinely bad
everywhere" -- both produce an all-false column, but only the former is
missing data.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
andremun
changed the title
docs: add a curated landing page, Getting Started guide, and Options Reference
docs: curated landing page/guide/reference, plus a PYTHIA eval fix (#345)
Sep 26, 2026
[Additive] matlab-fixture-publish.yml, workflow_dispatch-only, requires an
explicit publish_branch input. Exports a fresh reference bundle from real
MATLAB, same as matlab-oracle-verify.yml, but pushes the raw result to a
new branch (based on main) instead of an upload-artifact zip -- needed
because this session's sandbox can reach github.com but not the Actions
artifact blob-storage host, so a direct git push is the only way to get a
real-MATLAB-generated bundle from a GitHub-hosted runner into a
reviewable place. Does not touch fixture_provenance.py's pinned
constants, fixture_inventory.json, or run tests -- that follow-up happens
locally after pulling the branch. Not for routine CI use.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
[Additive] A brand-new workflow_dispatch-only workflow isn't dispatchable
via the API until GitHub has seen it fire at least once, which normally
requires it to be on the default branch first. Added a push trigger
scoped to this file's own path on this branch, so pushing this exact
change registers the workflow without merging anything to main. The job
itself guards on github.event_name == 'workflow_dispatch', so the
push-triggered run this commit causes is a no-op, not an actual publish.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
[Additive] Same file as on PR #343. Added here specifically to answer a
direct question: does the refreshed bundle actually reproduce on a fresh
run now that generation is Linux-to-Linux (no more macOS-vs-Linux noise)?
Running this on the current head diffs a fresh master export against the
new tests/fixtures/matlab/current (fdad7a43...) committed in this PR,
which InstanceSpace's master still matches exactly at push time.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
…ion, missing workflow)
[Additive]. Adds matlab-fixture-publish.yml to this branch (referenced by
tests/matlab_export/README.md's provenance section but missing here; the
self-guarded push trigger is dropped since GitHub already registered the
workflow from its first use on PR #343). Reconciles the PR description's
stale "1047 passed" against the actual 1049 pytest-collected count.
Appends a roadmap v1.78 entry correcting v1.76/v1.77's "8 files are
code-attributable" claim, per two further independent same-commit
re-exports that reproduced an identical 182-file diff and exposed the
comparison error - full detail posted as PR/issue comments rather than
edited into the append-only historical rows.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
This branch has not been deployed
No deployments
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
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.
Compatibility tags:
[Additive]for the docs site;[Behavior-changing]for the PYTHIA eval fix (commitf9def48, see below). No other runtime code changed.This branch ended up carrying two unrelated changes because this session's environment pins all its work on
andremun/pyInstanceSpaceto this one branch. They're independently reviewable by commit.1. Docs site (original scope,
[Additive])The hosted docs were only pdoc's generated API reference: one page per module, no landing page, no guide.
andremun/InstanceSpace(the MATLAB repo) had just rebuilt its own docs (issue #53) as a hand-authored, MATLAB-toolbox-style site, 29 pages. This PR gives pyInstanceSpace a lighter version of that idea: a small curated shell on top of pdoc, not a full port (the MATLAB site's generator alone is 664 lines, and its pages are hand-written per function).Changes
docs_site/pages/— three hand-written pages, styled bydocs_site/assets/style.css:index.html: what Instance Space Analysis is, a small pipeline diagram, links to the other pages, and the three citations from README.getting-started.html: install, themetadata.csvformat, and a build/explore example.options-reference.html: theoptions.jsonfields most users need, grouped by stage, adapted from README's own Options section.poe docsnow builds pdoc's output intosite/api/(it built directly intosite/before) and copies the curated pages intosite/. The site's URL structure becomes/,/getting-started.html,/options-reference.html,/api/instancespace.html.docs_site/pdoc-template/module.html.jinja2— a small pdoc template override that adds a "Docs Home" link from every generated API page back to the landing page. Both halves share pdoc's own accent color, so there is no jarring break between the hand-written and generated pages..github/workflows/docs-pages.ymlandvalidation-tests.yml: renamed the build step to "Build docs site" (was "Build API docs..."), reorderedvalidation-tests.yml's MATLAB-oracle staleness check to run last so it no longer blocks lint/type/docs/pytest/coverage from running and reporting (see CI release_gate fails: MATLAB oracle is stale after andremun/InstanceSpace's master advanced #344), and added a new report-onlymatlab-oracle-verify.ymljob that runs the real MATLAB exporter againstandremun/InstanceSpace's current master to check actual output, not just a commit-SHA pin.2. PYTHIA eval fix (
f9def48,[Behavior-changing], closes #345)While diagnosing the MATLAB-oracle drift above, traced those 8 real-drift files to
andremun/InstanceSpace#58, closed today: MATLAB used to score a trained algorithm against a fabricated all-false truth column when the test set had no data for it. This port had deliberately mirrored that MATLAB defect bit-for-bit (recorded as intentional at the time, per this repo's "MATLAB is the behavioral authority" policy) — this commit ports MATLAB's own fix. A trained algorithm with no test-set coverage now getsNaNaccuracy/precision/recall and a zero confusion row, instead of a fabricated score, matching the same treatment a test-only algorithm with no trained-model slot already received.No fixture or manifest changes were needed or made: no current
tests/fixtures/matlab/currentparity test reads the affected files for aPythiaStage.evaluatecomparison. Full pytest suite passes unchanged (1047 passed).Verification
poe check(black, ruff, mypy--strict, docs) and the full pytest suite (1047 passed) both pass, on the current head.site/assets/style.css, andsite/api/instancespace.htmlresolves.release_gateis expected to remain red on this PR: its final step (MATLAB oracle staleness, deliberately last so it no longer blocks everything else) isandremun/InstanceSpace#344, unrelated to this PR's diff and not fixable without a human-reviewed MATLAB re-verification (see #344 for the full trail).verify_against_real_matlabis report-only (continue-on-error) by design for the same reason.🤖 Generated with Claude Code
https://claude.ai/code/session_01Cr45PPFZJorxbj4dcgVM25
Generated by Claude Code