Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
167 commits
Select commit Hold shift + click to select a range
569a308
Fix 1.1 release review findings in scoring, caching, fonts, and docs
jeremymanning Sep 6, 2026
b3eafe5
Correct NumPy 2 optional dependency floors and finalize release revie…
jeremymanning Sep 6, 2026
f116dd7
refactor(backtest): hoist the Forecaster/Imputer imports out of the s…
jeremymanning Sep 6, 2026
f1a1e09
fix(predict,align): reject repeated metrics, blame t= for holdout=Tru…
jeremymanning Sep 6, 2026
e47968f
test: replace the three spy/fake-object tests added since 1.0 with re…
jeremymanning Sep 6, 2026
a59f2e2
test(examples): scan every example and tutorial for the native-usage …
jeremymanning Sep 6, 2026
ef887ca
fix(plot,io,tools): release-review findings in the 1.1 animation, tit…
jeremymanning Sep 6, 2026
1be634d
fix(manip,align): fit() returns self so sklearn-style chains work
jeremymanning Sep 6, 2026
f0e56c9
docs: release-review documentation fixes for 1.1.0
jeremymanning Sep 6, 2026
223d468
docs(lsl): fold synthetic_outlet's custom 'Signal definition' section…
jeremymanning Sep 6, 2026
384fe99
fix(plot,predict): panels, series-mode, forecast and hierarchy findin…
jeremymanning Sep 6, 2026
00e5a00
docs(tutorials): re-execute the eight edited tutorials on the reviewe…
jeremymanning Sep 6, 2026
f775b37
docs(tutorials): re-rendered wikipedia_embeddings video from the re-e…
jeremymanning Sep 6, 2026
63aa9cf
docs(notes): 1.1 release review session log (findings, fixes, verific…
jeremymanning Sep 6, 2026
9340300
fix(windows): POSIX paths in the example scanner; cache replace toler…
jeremymanning Sep 6, 2026
d20fdde
docs(notes): three skill-compounder notes from the 1.1 release review…
jeremymanning Sep 6, 2026
0e4f57b
docs(notes): end state of the 1.1 release review session
jeremymanning Sep 6, 2026
45fe779
fix(plot): a marker+line format string keeps its marker in the legend
jeremymanning Sep 6, 2026
087e338
docs(notes): feature-tour follow-up (legend marker fix, mixture demo …
jeremymanning Sep 6, 2026
abe9295
fix(plot,reduce): aspect-aware panels=True grid, no second pipeline f…
jeremymanning Sep 6, 2026
edc7d28
docs(notes): 9.8 panels follow-up
jeremymanning Sep 6, 2026
1862086
fix(plot): truth= legend glyph shows its markers; 2-D density grids s…
jeremymanning Sep 6, 2026
22219eb
feat(plot): panels= parity on plotly, hyp.subplots(backend='plotly') …
jeremymanning Sep 7, 2026
a5fb653
fix(plot,predict): red-team round 1 -- panel grid backend, density gr…
jeremymanning Sep 7, 2026
e9dd085
fix(predict,plot): red-team round 2 -- fitted-model reuse floor, plot…
jeremymanning Sep 7, 2026
74a888d
docs(notes): panels parity + red-team rounds 1-2 log; skillnotes
jeremymanning Sep 7, 2026
b1382d8
fix(plot): forecast-schedule projection ignores timer noise from 2- a…
jeremymanning Sep 7, 2026
ab5d7ce
fix(plot): forecast styling and legend entries, plotly panel geometry…
jeremymanning Sep 7, 2026
f9ccc75
fix(plot): Codex round-3 findings -- collection ownership under regro…
jeremymanning Sep 7, 2026
49441a3
docs(notes): round-3 outcome, round-4 scheduling
jeremymanning Sep 7, 2026
687e98c
fix(plot): Codex round-4 findings -- pinned forecast_fmt colours, mix…
jeremymanning Sep 8, 2026
f4f7ab8
docs(notes): round-4 pushed, round-5 blocked by the Codex usage limit…
jeremymanning Sep 8, 2026
4c4b288
feat(api): hyp.set_autoinstall() switches on-demand extra installatio…
jeremymanning Sep 8, 2026
3f4b087
fix: address the paused Codex release audit (offline built-ins, expor…
jeremymanning Sep 8, 2026
c700c85
fix: Codex round 6 findings (overlapping set_autoinstall scopes, expo…
jeremymanning Sep 8, 2026
c88bc03
docs(notes): round-6 fixes pushed as c700c85f; Codex round 7 launched
jeremymanning Sep 8, 2026
339ce05
docs(notes): Codex round 7 cut off by the usage limit; detached relau…
jeremymanning Sep 8, 2026
081f7c9
docs(notes): CI green on c700c85f
jeremymanning Sep 8, 2026
14e0965
fix: Codex round 7 (panel cells from analyzed data, palette slots con…
jeremymanning Sep 8, 2026
1cad1e6
docs(notes): resumed; docs pipeline green on 14e0965e
jeremymanning Sep 8, 2026
650808f
fix: Codex round 8 (construct-then-enter scope race, panel cluster re…
jeremymanning Sep 8, 2026
8066308
feat: sorted image palettes, data-matrix palettes (palette_* options)…
jeremymanning Sep 8, 2026
25b3ba6
feat: datawrangler-based datatype handling everywhere (wave 1), manip…
jeremymanning Sep 8, 2026
767e327
fix: MatrixColormap honours the Colormap contract (Codex round 10); C…
jeremymanning Sep 8, 2026
faedf14
fix(review): Codex round 11 -- manip mixed lists keep indices, Matrix…
jeremymanning Sep 8, 2026
0a2cc0d
chore: checkpoint local release work before renewed audit
jeremymanning Sep 8, 2026
2e9669d
chore: checkpoint reviewed release fixes before backtest alignment
jeremymanning Sep 9, 2026
c033e85
fix: score forecasts at observed times and isolate animation models
jeremymanning Sep 9, 2026
4e825a4
fix: prevent overflow in integer forecast timestamps
jeremymanning Sep 9, 2026
a449266
fix: address notebook visual review and verification gaps
jeremymanning Sep 10, 2026
4b23022
test: verify notebook outputs and opacity across animation frames
jeremymanning Sep 10, 2026
2829556
fix: preserve notebook outputs on unchanged tour regeneration
jeremymanning Sep 10, 2026
181410a
fix: make notebook review I/O portable to Windows
jeremymanning Sep 11, 2026
fa3e60e
ci: provision the verified Ruff version for lint checks
jeremymanning Sep 11, 2026
2503a54
fix: stream plots under a plotly render backend; scan axis labels for…
jeremymanning Sep 11, 2026
deeb1f9
tour: pin matplotlib-only cases and render the describe curve
jeremymanning Sep 11, 2026
09f56b2
notes: 2026-09-11 final review findings and fix-wave plan
jeremymanning Sep 11, 2026
6ccc37b
fix(io): yahoo intraday bars keep their timestamps instead of midnight
jeremymanning Sep 11, 2026
501a2a3
fix(normalize): a fitted Normalizer reads 1-D data as one column
jeremymanning Sep 11, 2026
d3b56ce
fix(forecast): split marker+line fmt no longer shifts forecast/truth …
jeremymanning Sep 11, 2026
ec0700e
fix(truth): ndims=1 truth= must be one column of values per trace
jeremymanning Sep 11, 2026
806f99d
fix(plot): per-dataset {category: color} dict palettes colour marker-…
jeremymanning Sep 11, 2026
2fc2a12
fix(autoinstall): no teardown traceback; a re-entered handle keeps ca…
jeremymanning Sep 11, 2026
e9d4f92
fix(1-D): a one-column trace's x is the row index in rows, on both ba…
jeremymanning Sep 11, 2026
b019744
fix(animate): live forecasts on 2-column data follow the axes' dimens…
jeremymanning Sep 11, 2026
676bd15
fix(forecast): a forecast_fmt marker is drawn at the forecast's steps…
jeremymanning Sep 11, 2026
22ae49c
docs(changelog): correct 1.1.0 claims found by the release-document r…
jeremymanning Sep 11, 2026
3ee54b8
fix(io): a sniffed zip keeps the .npz trust error instead of a parque…
jeremymanning Sep 11, 2026
3dac1ba
fix(io): offline misses of guessed sources and unparseable cached copies
jeremymanning Sep 11, 2026
cb3fd17
fix(align): Aligner classes read arrays; alignment warnings name the …
jeremymanning Sep 11, 2026
8f64d47
fix(align): dispersion score raises when every dataset is constant
jeremymanning Sep 11, 2026
e84f9c7
notes: record hover-name report, docs findings, worktree-base lesson
jeremymanning Sep 11, 2026
36b5c2b
fix(forecast): marker-only categorical regrouping always refuses to a…
jeremymanning Sep 11, 2026
314a236
build: scikit-image floor 0.25.0, the first release with cp313 wheels
jeremymanning Sep 11, 2026
05f7aeb
release: fix checklist order and claims; gate a stale CHANGELOG date
jeremymanning Sep 11, 2026
c59b3c6
fix(legend): legend_colors= list may name one colour per data entry b…
jeremymanning Sep 11, 2026
c205c57
fix(load): the TypeError lists polars frames, which load() accepts
jeremymanning Sep 11, 2026
ca6c205
fix(pipeline): rows a manip stage empties stop the pipeline there
jeremymanning Sep 11, 2026
63427ae
tour: apply figure-QA adjudication to cases and Inspect text
jeremymanning Sep 11, 2026
0673f4b
fix(plotly): markers only at true observations; hue markers honour al…
jeremymanning Sep 11, 2026
f6f4afb
fix(plot): composing into ax= continues the palette without repeating…
jeremymanning Sep 11, 2026
4b1fd9e
fix(plot): panels= splits a plain legend_colors list per panel
jeremymanning Sep 11, 2026
cb33e89
fix(plot): two-column data draws into a 2-D ax= at the default ndims
jeremymanning Sep 11, 2026
e876a55
docs(release-notes): refresh the 1.1.0 draft from the reviewed CHANGELOG
jeremymanning Sep 11, 2026
46a1304
fix(plot): per-dataset and nested labels= survive hue=/cluster= regro…
jeremymanning Sep 11, 2026
c00b8cc
fix(colors): a 0-255 colour list raises instead of becoming a data pa…
jeremymanning Sep 11, 2026
0d4f0ca
Merge W6: release checklist, notes, CHANGELOG corrections
jeremymanning Sep 11, 2026
c33a1eb
fix(plot): a reused pipeline's fitted cluster step colours the figure
jeremymanning Sep 11, 2026
7fe6b68
fix(fonts): font='Noto Sans' resolves the bundled face in a fresh pro…
jeremymanning Sep 11, 2026
49370f5
fix(plotly, dates): date axes are time-zone invariant; open-ended dat…
jeremymanning Sep 11, 2026
6bf4222
fix(matplotlib): an explicit marker= wins over the fmt marker, and ma…
jeremymanning Sep 11, 2026
7ccaac7
fix(panels): forecast_trail= no longer refuses itself in the panel probe
jeremymanning Sep 11, 2026
b8f01ee
fix(predict): forecast regular calendar data on its own calendar
jeremymanning Sep 11, 2026
8ff2d06
fix(plotly): cell colorbar placement, kept cell titles, clear ax= dim…
jeremymanning Sep 11, 2026
b3342dd
fix(matplotlib): continuous-hue markers carry alpha=
jeremymanning Sep 11, 2026
ab55c16
fix(plotly): refuse 1-D animations like matplotlib; serial FrameConte…
jeremymanning Sep 11, 2026
0845512
fix(transform): bare-array transform= is one dataset; a frame's index…
jeremymanning Sep 11, 2026
66ec8c4
fix(predict): reuse a fitted forecaster across index kinds again (1.0…
jeremymanning Sep 11, 2026
f05b299
fix(plot): the non-finite hue warning counts observations and names t…
jeremymanning Sep 11, 2026
70dc00b
Merge W2: io/tools/_shared/colors/fonts review fixes
jeremymanning Sep 11, 2026
a014ae9
fix(warnings): align/impute/manip/core warnings name the caller's line
jeremymanning Sep 11, 2026
8ce518f
fix(predict): ARIMA's minimum history counts seasonal_order
jeremymanning Sep 11, 2026
40c509c
fix(matplotlib): observation-label connectors and box edges are drawn…
jeremymanning Sep 11, 2026
efed157
test(predict): time-policy warnings are issued once, and only when th…
jeremymanning Sep 11, 2026
d656196
fix(truth): the 'truth' legend key is neutral gray when truths span s…
jeremymanning Sep 11, 2026
fde433f
fix(matplotlib): titles and axis labels on caller axes and panels= ce…
jeremymanning Sep 11, 2026
8fd2f0d
fix(ndims=1): a shuffled time index is drawn in time order, joining i…
jeremymanning Sep 11, 2026
4a6b4f7
docs: fix tutorial/example content findings from the 2026-09-11 review
jeremymanning Sep 11, 2026
cf68cca
fix(plotly): honour frame_kwargs, keep zoom animation-only, anchor a …
jeremymanning Sep 11, 2026
d4d81ea
fix(ndims=1): concise date ticks on matplotlib so labels never collide
jeremymanning Sep 11, 2026
f2e7a35
fix(plot): a nested-list input's legend names its outer groups
jeremymanning Sep 11, 2026
d3f75ab
docs(projectile_kalman): say what the forecast figures show
jeremymanning Sep 11, 2026
fd3948c
fix(matplotlib): marker= on a line fmt stays one artist, marked at th…
jeremymanning Sep 11, 2026
a422a97
fix(surface): colour hull vertices from their nearest points; headles…
jeremymanning Sep 11, 2026
5c09e1b
Merge W5: tutorials/examples content fixes
jeremymanning Sep 11, 2026
46c7170
Merge W1: predict calendar/reuse/seasonal/warning fixes
jeremymanning Sep 11, 2026
1e1abb4
notes: merges W1/W2/W5/W6, surface-colour root cause, open design que…
jeremymanning Sep 11, 2026
32506e9
fix(plot): the categorical line path lists its legend in category order
jeremymanning Sep 11, 2026
fe2565f
fix(plotly): name every hoverable data trace like its legend entry; k…
jeremymanning Sep 11, 2026
97d3245
test: account for transform= in the panel roster; the date axis uses …
jeremymanning Sep 11, 2026
69c1ff7
Merge W4a: forecast/truth/time-axis review fixes
jeremymanning Sep 11, 2026
bfbace3
fix(animate): keep every observation, move every morph frame, show ca…
jeremymanning Sep 11, 2026
d3fefd6
fix(cluster): reject flat model kwargs in a cluster dict spec instead…
jeremymanning Sep 11, 2026
07dd98d
Merge fix/1.1-release-review (69c1ff7d) into the animation-core fixes
jeremymanning Sep 11, 2026
fa9a2a6
fix(plot): an explicit legend=False wins over names=
jeremymanning Sep 11, 2026
af8cbdf
Merge branch 'fix/1.1-release-review' into worktree-agent-a551b1e7532…
jeremymanning Sep 11, 2026
d2d74d9
Merge branch 'fix/1.1-release-review' into worktree-agent-a1cf9c0c41c…
jeremymanning Sep 11, 2026
a2e19ba
Merge branch 'fix/1.1-release-review' into worktree-agent-aa4e8f5b24e…
jeremymanning Sep 11, 2026
785dca5
Merge W7: align/impute/manip fixes, pipeline cluster replay, warning …
jeremymanning Sep 11, 2026
2deac69
fix(transform): polars frames work; datatype checks via the shared he…
jeremymanning Sep 11, 2026
9b39e38
fix(plotly): tag animated data legend proxies hyp_legend_proxy, not t…
jeremymanning Sep 11, 2026
4428df9
Merge branch 'fix/1.1-release-review' into worktree-agent-a02d608da03…
jeremymanning Sep 11, 2026
83b99d6
Merge W10: flat cluster spec keys raise; legend=False wins over names=
jeremymanning Sep 11, 2026
2151cfe
fix(matplotlib): keep label_alpha as the label box's own alpha
jeremymanning Sep 11, 2026
5b14ca5
fix(animate): keep line reveal timing on the refined grid; labels fol…
jeremymanning Sep 11, 2026
44bc2c4
docs(plot): docstring for _palette_continuation's sample helper (GH #…
jeremymanning Sep 11, 2026
7f45de7
notes: merge status, full-suite result, CHANGELOG drafts backup
jeremymanning Sep 11, 2026
4d6dd7c
Merge W3 batch 1: plotly markers, hue alpha, hover names, cells, anim…
jeremymanning Sep 11, 2026
45c4424
test(animate): state the chemtrails/hue-window/unequal-length audit c…
jeremymanning Sep 11, 2026
ed67c60
fix(plotly): animated continuous hue travels with the data (3-D colou…
jeremymanning Sep 11, 2026
6b81505
fix(plot): record the palette colours and legend ranks on a plotly fi…
jeremymanning Sep 11, 2026
ff1574e
fix(plotly): 3-D data lines render at the requested width; animations…
jeremymanning Sep 11, 2026
472ca09
fix(plotly): clip the 3-D density volume grid to the cube so its edge…
jeremymanning Sep 11, 2026
bd23c09
fix(plotly): Play/Pause controls sit below a visible x axis' tick lab…
jeremymanning Sep 11, 2026
171e74a
docs(plotly): trail-trace bookkeeping comments name hyp_trail_index a…
jeremymanning Sep 11, 2026
5755324
Merge W4b: palettes, markers at samples, labels, legends, panels, ax=…
jeremymanning Sep 11, 2026
f5ab128
Merge fix/1.1-release-review (57553242) into the animation-core fixes
jeremymanning Sep 11, 2026
61b59bd
fix(specs): reject flat model kwargs in every dispatcher's dict spec …
jeremymanning Sep 11, 2026
250c30b
Merge branch 'fix/1.1-release-review' into worktree-agent-aa9afcc4679…
jeremymanning Sep 11, 2026
a047c20
test(animate): animated observation markers land exactly on the refin…
jeremymanning Sep 11, 2026
acca7f1
test(plotly): hierarchy width test accounts for the 3-D GL width comp…
jeremymanning Sep 11, 2026
d33ca33
Merge branch 'fix/1.1-release-review' into worktree-agent-a02d608da03…
jeremymanning Sep 11, 2026
afbb528
test(plotly): marker=/markers= on a line style marks only the observa…
jeremymanning Sep 11, 2026
cc418fa
Merge W11: flat model-spec keys raise across dispatchers
jeremymanning Sep 11, 2026
4669ddb
docs(plot): correct unit-scale limits, slow-notice timing and title m…
jeremymanning Sep 11, 2026
27d4686
docs(changelog): record the 2026-09-11 review fixes
jeremymanning Sep 11, 2026
096f5a7
Merge branch 'fix/1.1-release-review' into worktree-agent-a02d608da03…
jeremymanning Sep 11, 2026
457ab93
notes: merge status and verification pipeline
jeremymanning Sep 11, 2026
0ed1e8f
Merge W3 batch 2: plotly animated hue, 3-D line width, density clip, …
jeremymanning Sep 11, 2026
db01768
Merge W9: animation core (every observation a grid vertex, moving mor…
jeremymanning Sep 11, 2026
b630802
docs(changelog): animation-core and plotly animation review fixes
jeremymanning Sep 11, 2026
53c7673
fix(predict): time-policy warnings name the caller's line, once per p…
jeremymanning Sep 11, 2026
25da7cc
Merge warning attribution fix for predict time policies
jeremymanning Sep 11, 2026
461d2e3
fix(predict): print float steps without representation noise
jeremymanning Sep 11, 2026
b1f857c
docs: re-execute all 25 tutorials and regenerate gallery thumbnails
jeremymanning Sep 11, 2026
82951bf
notes: Colab plotly-default lesson
jeremymanning Sep 11, 2026
e684d7c
notes: verification pipeline results
jeremymanning Sep 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
18 changes: 18 additions & 0 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,22 @@
- **2026-09-05** A 'clean' docs build (sphinx -W -E -a) does NOT remove sphinx-gallery's generated docs/auto_examples/ (gitignored): after deleting or renaming an example, rm -rf docs/auto_examples first or -W fails on 'document isn't included in any toctree' for the stale pages (2026-09-05, after the gallery consolidation). <!-- id:n391712600x317 -->
- **2026-09-05** Subagent dispatch prompts must state the no-mocks rule verbatim ('no mock objects, no monkeypatching library functions as spies; prove behaviour with real observables'): on 2026-09-05 an agent verified 'never touches the network' by monkeypatching requests.get and seaborn_dataset; replaced with mtime/.part/uncached-URL-raises observables. <!-- id:n4091109334x348 -->
- **2026-09-05** Never assert absolute font-metric numbers (probe heights, figure inches, pixel rows) in tests: CI's matplotlib (3.11.1) hints text differently from the local 3.10.8 -- 2026-09-05 two new tests failed on every CI job while green locally; assert against the library's own probe on the same axes, or relative tolerances. <!-- id:n1698690037x325 -->
- **2026-09-06** A test that compares repo-relative paths as strings (allowlists, rosters, planted-marker findings) must build them with os.path.relpath(...).replace(os.sep, '/'): on 2026-09-06 the widened examples scanner passed on macOS/Linux and failed all four Windows jobs on 'docs\tutorials\align.ipynb' vs 'docs/tutorials/align'. <!-- id:n3130054099x327 -->
- **2026-09-06** os.replace onto a file other threads are reading/renaming raises PermissionError (WinError 5) on Windows only; wrap cache/atomic-write renames in a short retry that accepts an existing identical destination (hypertools/io/sources.py _replace_retrying, 2026-09-06), and expect Windows CI to be the only place such a test fails. <!-- id:n2929415745x334 -->
- **2026-09-06** A release verification pipeline (notebook re-execution -> full pytest -> sphinx -W gallery -> example smoke gate) runs ~50 min, past the 10-min Bash cap: write it as a scratchpad zsh script with step markers, launch with nohup, and poll the log for the DONE marker from run_in_background watchers (each <=9.5 min); git checkout the two autosummary stubs FrameContext/LSLStream after any sphinx build (whitespace-regenerated). <!-- id:n3762867048x433 -->
- **2026-09-06** A line whose markers are drawn on a SEPARATE artist (fmt split, truth= overlay) shows a marker-less legend glyph; keep marker= on the line artist with markevery=[] so the legend handle carries it -- fixed twice (45fe7799 fmt split; truth overlay 2026-09-06), so check every marker-splitting draw path for this. <!-- id:n1685346725x318 -->
- **2026-09-06** The gitignored Colab feature tour (notes/colab/hypertools_1.1_feature_tour.ipynb) is prose that goes stale exactly like docs/tutorials: two 2026-09-06 findings (9.8 'plotly panels drop return_model', 12.4 'pip install predict-hf first') were library behaviours already fixed on-demand; include notes/colab/*.ipynb in the post-change grep of note n2056000368x385, and verify an install claim in a FRESH venv (python -m venv + pip install . + the call) before editing it. <!-- id:n3699028289x477 -->
- **2026-09-07** pkill -f <pipeline.sh> kills only the zsh script; its running child (pytest, sphinx) is orphaned and keeps going, so relaunching the pipeline ran TWO sphinx builds whose 'rm -rf docs/auto_examples' deleted each other's files (2026-09-07: FileNotFoundError on auto_examples/animate_weather_decades.py, scraper 'did not produce expected image'); kill the children too (pkill -f 'm sphinx -W'; pkill -f 'pytest -q') and confirm with ps before relaunching. <!-- id:n3738080889x460 -->
- **2026-09-07** Plotly sizes a 3-D scene by its domain HEIGHT only and clips at the sides (measured 2026-09-07: same 267x209 px cube in 600x300 and 1200x300 scenes; a 300x600 scene's cube is 415 tall, cut at 300 wide): at hypertools' default eye the cube is 0.89 x height wide, 0.70 tall, and apparent size ~ 1/eye-distance only when backing OFF (an eye nearer than ~0.8x clips the front). Name a calibration constant by its reference (SCENE_CUBE_WIDTH_PER_HEIGHT was 1.4 = width per CUBE height, read as width per SCENE height, so every square panel cell backed the camera off 1.4x). <!-- id:n1370451665x576 -->
- **2026-09-07** Figure QA that works (2026-09-07, Jeremy's design): three SEPARATED agents -- one writes each figure's EXPECTED appearance from the notebook code/prose + docstrings without seeing images, one describes the OBSERVED renders without seeing code, one adjudicates with probes -- found 11 real gaps in the tour that solo eyeballing missed (ax= palette ignored, z-label outside the tight bbox, 2-D frame on the data, faded recoloured forecasts); render plotly outputs from their notebook JSON with kaleido (scratchpad review/manifest + tour_out/extract.py pattern) and re-run only the changed figures per round. <!-- id:n1781868848x613 -->
- **2026-09-07** sed 's/a/b/' without the g flag replaces only the FIRST match per line: deriving full_verify4.sh from full_verify3.sh by 's/sphinx_err2/sphinx_err4/' redirected sphinx stderr to the new file but left the same line's grep -c counting the STALE old file, so two pipelines reported 'warnings 1' on clean builds (2026-09-07); use /g (or a variable for the path) when a line names a file twice. <!-- id:n1233963273x397 -->
- **2026-09-07** Forecast index != dataset index: a predict=[...] collection's forecasts are MODEL-MAJOR (forecast i = model i//n_datasets, dataset i%n_datasets), and hue=/cluster= regrouping makes RUN index != dataset index. Three round-3/4 findings (2026-09-07) were the same confusion: static ownership skipped when counts coincided, animated reveal lookups by forecast index (IndexError), plotly hyp_dataset tags. Any new code that touches a forecast must translate through _model_forecast_owner / forecast_datasets (forecast -> source dataset) and _forecast_owner / _seg_ds (dataset -> final run) before indexing schedules, lines or runs. <!-- id:n1598193450x634 -->
- **2026-09-07** An LSL test that resolves by type='EEG' fails whenever ANOTHER process advertises an idle EEG outlet (2026-09-07: a VS Code notebook kernel with the tutorial's synthetic outlet, and a Codex audit executing the same notebook) because lsl_stream() takes the first match; give a test outlet a unique stream TYPE (like the unique names) and check pylsl.resolve_streams() for foreign outlets before blaming the library. <!-- id:n2334423855x422 -->
- **2026-09-08** Never git stash in a tree other agents are editing: on 2026-09-08 a subagent stashed to compare a baseline and unstaged every other agent's index (recovered via git read-tree from the stash's index commit); compare against HEAD with git show HEAD:<path> or a scratch copy instead. <!-- id:n970508101x288 -->
- **2026-09-08** A process-global setting that is both a direct call and a context manager (hyp.set_autoinstall) took three red-team rounds to get right (restore-order race, retained handles, construct-then-enter race across threads): model it as LIVE handle records (weakrefs, construction order) plus a BASELINE folded in by the weakref callback of a handle that dies unentered, take the newer of top-record and baseline by call order, mark exited records finished; test overlapping blocks across threads, construct-then-enter interleaving, 100k discarded direct calls (tracemalloc), and a block handle dying after exit. <!-- id:n1244798541x613 -->
- **2026-09-08** Codex exec rounds die at the account usage limit with NO -o report (twice on 2026-09-08, ~200k tokens each): salvage findings from the stdout log (grep for MAJOR/MINOR headings), and write the next prompt to skip the gallery build/notebook re-runs and to APPEND findings to the notes file as it goes; the slim prompt finished in 10 minutes. <!-- id:n859586284x348 -->
- **2026-09-08** The repo's readme is lowercase 'readme.md': a test that opens 'README.md' passes on macOS (case-insensitive) and fails on every Linux CI job (2026-09-08, tests/test_format_data.py); grep the tracked filename with git ls-files before hard-coding a path in a test. <!-- id:n162227783x270 -->
- **2026-09-08** A watcher that greps a codex run log for the cut-off phrase ('usage limit') exits at once because codex echoes the PROMPT into the log and the prompt mentions the usage limit (2026-09-08, two wasted watcher cycles); grep the server's own wording ('hit your usage limit', 'Try again at') and never a phrase the prompt contains. <!-- id:n1274548565x334 -->
- **2026-09-11** Agent isolation:'worktree' can base the new worktree on origin's default branch (master @ 96ac8b7f) instead of the current branch HEAD (2 of 8 fixers on 2026-09-11), and fails outright when the shell cwd is outside the repo; cd to the repo first and make every worktree prompt check 'git log -1' and reset to the intended base before editing. <!-- id:n2445035275x350 -->
- **2026-09-11** Colab and Kaggle auto-select the PLOTLY render backend, so any code using a matplotlib-only return API (fig.axes, .canvas, HyperAnimation .draw_frame/.on_frame/.n_frames, an internal hyp.plot call) breaks there while passing locally: seen 3x on 2026-09-11 (plot_stream's head plot, tour ANIM-clock/PLOT-cjk, five launch notebooks). Pin backend='matplotlib' at such call sites and test them under hyp.set_interactive_backend('plotly'), the same preference Colab sets. <!-- id:n2896508265x474 -->
<!-- skillnote:end -->
18 changes: 18 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,12 @@ jobs:
# wheels for all three CI platforms/Python versions here.
pip install -e ".[dev,torch]"

- name: Check repository lint (Ubuntu Python 3.12)
if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.12'
run: |
python -m pip install "ruff==0.15.20"
python -m ruff check .

- name: Pre-fetch headless Chrome for kaleido (Plotly image/GIF export)
# tests/test_animation_export.py exports Plotly figures to GIF/MP4 via
# kaleido 1.x, which drives a headless Chrome. Pre-fetching it here (into
Expand Down Expand Up @@ -289,6 +295,18 @@ jobs:
run: |
cd /tmp/docs-clean/docs
python -m sphinx -b html -W -E -a . _build/html
- name: Run the docstring and guide examples (sphinx doctest builder)
env:
MPLBACKEND: Agg
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# the gallery was just built; the doctest builder only needs the
# `>>>` examples in docstrings and the guides (release audit
# 2026-09-07: two `hypertools.load` examples failed under this
# builder while the HTML build was green)
HYPERTOOLS_DOCS_PLOT_GALLERY: '0'
run: |
cd /tmp/docs-clean/docs
python -m sphinx -b doctest -W . _build/doctest
- name: Release gate -- generated gallery notebooks install the PyPI package
# docs/auto_examples/*.ipynb are gitignored and GENERATED by the build
# above from docs/conf.py's branch-aware install-cell (so they don't exist
Expand Down
Loading
Loading