Repository navigation
v2.0.0 — 删除无效的 device 形参,CI 扩到 macOS/Windows
Breaking
ChassisSimEnv(device=...)andcs.make(..., device=...)are gone. The parameter
had been inert since 1.0 — the encoder lives in the Actor andContextBuilderonly
computes numpy — and was documented as inert. A no-op keyword is still public API, so
removing it is a major bump rather than a patch:ChassisSimEnv(device="cpu")now
raisesTypeError: __init__() got an unexpected keyword argument 'device', and
cs.make(device="cpu")raisesValueError: 未知的 make() 参数 ['device']followed by
the 57 accepted keys. Grep training scripts fordevice=before upgrading; nothing
else about the constructor changed.- The matching entry is gone from both READMEs'
Known limitationssections, which
are renumbered (nine items, no gap).
Changed
- CI now runs the same suite on macOS and Windows (new
test-osjob: Python 3.12,
[dev,viz,planning],shell: bash,PYTHONUTF8=1), so the declared
Operating System :: OS Independentclassifier has something behind it instead of an
ubuntu-only history. ubuntu still covers 3.10–3.13. The matrix values are written as
arrays: a scalarpython-versionkeeps the YAML valid but makes GitHub reject the whole
workflow (the run then fails with zero jobs and no logs), sotests/test_ci_workflow.py
pins that shape as well as the job'sshell: bashsteps. - The planning parity golden compares
cusp_rejectionsonly in strict mode. That
count is discrete: both of its criteria (min_cusp_fold_arc,min_cusp_leg_separation)
compare a float against a fixed threshold, so a single ulp decides whether one candidate
is rejected. On the first macOS/Windows run the generated obstacles, path and headings
matched inside1e-9while the counter read 1 vs 0 and 1 vs 2 — the same path after a
different number of retries, not a porting error.CHASSIS_STRICT_GOLDEN=1still
asserts it, and the invariant that matters — a generated path contains no violating
cusp — is asserted independently bytest_cusp_filter_effective_on_generated_paths.
Fixed
- Worker crash logs no longer vanish on Windows.
reset()andstep()wrote the
traceback to a hard-coded/tmp/ackermann_worker_crash.log; Windows has no/tmp, so
open()raisedFileNotFoundError, the surroundingexceptswallowed it, and the
diagnostic disappeared. The path now comes fromtempfile.gettempdir()and the write is
explicitly UTF-8 — a Chinese traceback cannot be encoded through the default ANSI code
page either.
No other functional changes: observation layout, rewards, sensors, controllers, planning
and rendering are untouched in this release.