## softmata/horus — v0.4.0…v0.4.1

_106 commits._

### Features
- **feat(bindings): expose the loss counters to Python and C++ (#120)** (0a09bb5)

### Fixes
- **fix(registry): stop shipping a registry URL that answers 503 (#175)** (ba3be2e)
- **fix(pool): a truncated pool file must error, not SIGBUS the robot (#143)** (f862b2d)
- **fix(bindings): make the loss counters answerable, and test them (#125)** (3246dd6)
- **Merge branch 'main' into fix/windows-backoff-timer-flake** (ab8f42e)
- **fix(bench): run_variance was the null, and Windows has no clock_gettime** (2f1e110)
- **fix(bench,ci): compile off Linux, and pin docs to a ref that has the page** (da585b2)
- **fix(bench,sys): read NaN back, and stop asserting Unix on Windows** (4858c49)
- **fix(shm): reclaim abandoned regions inside a namespace that is still in use** (904f5ef)
- **perf(topic): the MP-claim CAS costs ~2ns, not 30 — measured on the right metric** (7f35160)
- **fix(pool): reclaim a tensor pool whose creator died before writing its header** (3fb2266)
- **fix(topic): a lost FanoutShm attach no longer strands a subscriber forever** (2fdf5b7)
- **fix(shm): stop unmapping a region that sibling Topic clones still point into** (f98a253)
- **perf(topic): stop recomputing the type name on every send and recv** (aa64ba4)
- **perf(pool): drop the per-dimension heap allocation from TensorPool::alloc** (cc41e8c)
- **perf(memory): stop heap-allocating a shape Vec per pooled buffer** (30597e7)
- **perf(net): stop zeroing 64 KB of stack per packet on the replicator hot paths** (8b02707)
- **perf(pool): scrub slots with a barriered memset instead of volatile words** (d3dfae1)
- **perf(simd): drop the hand-written AVX2 copies for platform memcpy** (3e78ec2)
- **perf(topic): move messages_total off the lines consumers poll per recv** (a971ee7)
- **perf+fix: round 3 measurement honesty, security audit remediation, benchmark cleanup** (03bb6aa)
- **perf(topic): build the co-located slot layout for small POD types** (ce078bd)
- **perf: honest measurement, a real IPC benchmark, and the structural tail costs** (f9905d8)
- **fix(ci): repair every failing workflow (#84)** (7343df6)
- **fix: give the spilled payload a real happens-before edge, and correct three wrong tests** (7871036)
- **fix: close a shared-memory data race, an unpinned read, and a wrapper-dir permission bug** (05358bc)
- **fix(ci): pin the docs contract at the ref where the whole live tier passes** (02b33c1)
- **fix(ci): repair every failing workflow** (c14b043)

### Backend
- **merge stack: the remaining 24 open PRs in one CI cycle (#129, #148-#172) (#174)** (297de25)
- **merge stack: every open PR in one CI cycle (#128-#147) (#146)** (21c3324)
- **merge stack: every open PR in one CI cycle (#93 #96 #98 #99 #100 #103 #105 #107 #109 #113-#118 #120-#124) (#119)** (a9540b5)
- **deps(npm): bump puppeteer (#87)** (3de22e9)
- **security(dependabot): stop auto-merging github-actions bumps unread (#102)** (d5b7720)
- **Merge pull request #89: Windows timer quantum, the fan-out gap, and a TSan lossy-send race** (d112c49)
- **deps(cargo): bump the rust-minor group with 2 updates (#88)** (f0a76c1)
- **Merge pull request #86: latency round 1, the use-after-munmap crash, and a test-suite honesty pass** (42d66ed)
- **Merge origin/main into perf/latency-round-1** (884a9c3)
- **bench(topic_probe): --alloc mode for the pooled allocate/free path** (55d74f8)
- **bench(all_paths): stop reporting a deliberate policy as a MISMATCH** (e9af9b2)
- **bench(topic_probe): bulk and tensor-backed payload modes** (fefc529)
- **bench(topic_probe): report the backend, and split send from transfer** (5ed2c49)
- **Merge perf/colo-layout: co-located slot geometry** (8700e11)
- **deps(cargo): bump the rust-minor group across 1 directory with 5 updates (#85)** (82d37a7)
- **deps(cargo): bump clap_mangen from 0.2.33 to 0.3.3 (#83)** (e258362)
- **checkpoint: test isolation + inversions** (d0f6537)
- **checkpoint: invert tests pinning the old behaviour** (7877eea)
- **checkpoint: compile repairs** (8df8f31)
- **checkpoint 14 (wip, to be squashed)** (ce43c23)
- **checkpoint 12 (wip, to be squashed)** (422c4ac)
- **checkpoint 11 (wip, to be squashed)** (08ca030)
- **checkpoint 10 (wip, to be squashed)** (9446ca7)
- **checkpoint 9 (wip, to be squashed)** (4023a24)
- **checkpoint 8 (wip, to be squashed)** (ac94d42)
- **checkpoint 7 (wip, to be squashed)** (76d1d32)
- **checkpoint 6 (wip, to be squashed)** (c16fd19)
- **checkpoint 5 (wip, to be squashed)** (2edb71b)
- **checkpoint 4 (wip, to be squashed)** (89c8651)
- **checkpoint 3 (wip, to be squashed)** (c1f9528)
- **checkpoint 2 (wip, to be squashed)** (269976b)
- **LIVE-5: close the non-POD half, and stop the suite lying about timing** (8080ae4)

### Tests
- **test(horus_core): scope the SHM corruption tests to their own namespace (#155)** (988a080)
- **test: run the 404 tests this repo already has but never executed (#126)** (71e6a4a)
- **test(manager): build scratch projects under target/, not /tmp (#95)** (425e342)
- **test(live-contract): tell "the node never started" apart from "attribution broke" (#92)** (dbaecc3)
- **test(install): guard the installer against Bash 4-only syntax (#90)** (1e48195)
- **test(backoff): margins the Windows timer quantum cannot swallow** (5d742e0)
- **test: stop asserting Unix capabilities on Windows** (40c78f9)
- **test(topic): the hostile-region tests need file-backed shared memory** (42a2225)
- **test(topic): force the remap the grow-race test was only hoping for** (b84a56b)
- **test(rt-alloc): observe the guard panic across a thread, not via catch_unwind** (03912ad)
- **test(log-buffer): isolate the count assertions, and pair the overhead ratio** (e727a54)
- **test(rt-pool): widen the six short scheduler windows proactively** (a4caa44)
- **test(failure-injection): the other two 300ms windows in the same file** (5205e29)
- **test(rt): skip the 10kHz rate check on a saturated machine, not on its result** (08fe9c7)
- **test(failure-injection): give the healthy nodes room past the crash point** (c38cbb6)
- **test(rt): calibrate the 10kHz config test against the default rate** (8e23b69)
- **test(scheduler): give the zero-copy attribution test time to tick** (5a89116)
- **test(hlog): best-of-N for the three timing tests, and undo my own over-tightening** (9911a47)
- **test(determinism): the other three 30ms scheduler windows too** (89ad4df)
- **test(determinism): give the invalid-core test a window that measures the property** (fd21dbe)
- **test(hlog): measure hlog, not the test harness's stderr pipe** (1a73bf0)
- **test(docs): enforce parity in the direction nothing was checking** (7fe9081)
- **test: land two salvaged fixes from PR #61, and pin the idle watcher by exact name** (d2d5344)
- **test(event_executor): make the two wake-path tests measure the wake path** (a82f2fc)
- **test(rt): guard the serde send path against per-message allocation** (5ae6a73)

### Docs
- **docs(changelog): the Python suite figures are the ones this tag ships (#180)** (a1b3f7f)
- **docs(cross-language): withdraw a release-only failure claim that does not reproduce (#94)** (3765e3f)
- **docs(dispatch): record the hot-path budget, and drop a saving that is not there (#91)** (cd63f31)
- **docs(cross-language): record the release-only failure, distinct from the contention note** (ce89991)
- **docs(contributing): say that the timing tests need --release, and what CI runs** (e327b08)
- **docs(memory): record why the slot scrub must not use non-temporal stores** (252fbc0)
- **docs(shm): don't link a public doc at a private const** (27ba6a8)
- **docs(topic): the messages_total cost is throughput, not latency** (31b49c0)
- **docs(topic): price the messages_total increment properly, and say what removing it costs** (13d1a87)
- **docs(cli): make the deprecated-short-flag comment agree with the table** (52b8964)
- **docs(README): re-measure against iceoryx2 after the registration fix** (dc51799)
- **docs(topic): record what the SpscShm MP-claim CAS costs, at the decision site** (5a36628)
- **docs(README): the bulk-payload path, and the allocation caveat that goes with it** (5cc2108)
- **docs(README): iceoryx2 table from the corrected harness, including where HORUS loses** (e181295)

### Chore
- **ci(autopilot): watch main, classify failures, keep the merge queue moving (#101)** (dfbb902)
- **ci(coverage): stop instrumenting two tick-rate assertions that measure the runner (#97)** (1beb739)
- **ci(tsan): the grow-race test drives a lossy send, which races by contract** (510a649)
- **ci(windows): skip the overshoot test as the fan-out gap it is, and retract my explanation of it** (b8c4095)
- **ci(integration): skip the stress_rt_* family, as coverage.yml already does** (cb91d75)
- **ci(actions): bump actions/cache in the actions group across 1 directory (#81)** (c9fa8be)
- **style: apply rustfmt to tensor_pool and safety_monitor** (dba42b3)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/softmata/horus?utm_source=github-action)._