Skip to content

Tags: AxonOS-org/axonos-stack

Tags

v0.3.3

Toggle v0.3.3's commit message

Verified

This commit was signed with the committer’s verified signature.
AxonOS-BCI Denis Yermakou
fix: one HAL in the graph, and the import that failed CI now earns it…

…s place

Two defects, and the first is the kind only this repository can see.

The stack moved to axonos-hal 0.3.0 for operating points while axonos-vault and
axonos-supervisor stayed on 0.2.0. Cargo resolves two versions of one crate
without complaint, and the compiler then refuses to unify the two SampleFrame
types it produced — an error that names the same type on both sides of a
mismatch. No individual crate can observe this about itself: vault is correct,
supervisor is correct, the HAL is correct, and the graph is wrong. Fixed by
re-pinning the dependents to 0.3.0 rather than by lowering the stack to hide it.

The second is smaller and was the visible one: ArtifactReport was imported and
never used, so clippy failed the build. It is now used for the thing it was
imported for. The summary names which findings a session met rather than
counting frames, because "1826 frames screened" is a number and "slew" is what
the recording actually did — which is the whole reason the screener reports
independent bits instead of a single severity.

Transcript regenerated. Clippy, rustfmt, tests, --locked build and docs all
green.

v0.3.2

Toggle v0.3.2's commit message

Verified

This commit was signed with the committer’s verified signature.
AxonOS-BCI Denis Yermakou
chore: licence texts, NOTICE, citation and changelog

The crate declared Apache-2.0 OR MIT in its manifest and README from its first
release and shipped neither licence text. A dual-licence declaration without the
licences does not grant what it announces: a reader who wanted to depend on this
had nothing to read, and Apache-2.0's attribution clause cannot be honoured
against a NOTICE that does not exist.

Added: both licence texts, a NOTICE stating authorship, the attribution
obligation, the intellectual-property position and the pre-clinical scope,
CITATION.cff with Denis Yermakou listed first, and a changelog.

No code changed. The version moves because the artefact a consumer receives is
materially different — it can now be depended on under the terms it always
claimed.

v0.3.1

Toggle v0.3.1's commit message

Verified

This commit was signed with the committer’s verified signature.
AxonOS-BCI Denis Yermakou
release: 0.3.1 — formatted, which the previous release was not

cargo fmt --check failed on main.rs. I edited the session through a script, ran
cargo build, and never ran rustfmt — so a release whose whole subject is that CI
diffs a transcript byte for byte shipped with source CI would not accept. There
is no excuse for that one; the formatter is the cheapest gate in the file.

Formatted, transcript regenerated from the formatted source so the two cannot
disagree, and the pipeline pin moved to v0.9.2 with the lockfile entry and the
stack table moving together.

v0.3.0

Toggle v0.3.0's commit message

Verified

This commit was signed with the committer’s verified signature.
AxonOS-BCI Denis Yermakou
feat!: 0.3.0 — the session became the whole path, and the lockfile bu…

…g that broke --locked

Two things, and the first is the reason CI was red rather than merely thin.

Cargo.lock declared axonos-stack at 0.1.0 while Cargo.toml said 0.2.0. I bumped
the manifest and hand-edited only the dependency revisions in the lock, so cargo
had to update it and --locked correctly refused. The lock is regenerated rather
than patched this time, which is the whole lesson: a lockfile is generated
output and editing it by hand is how it stops describing the thing it locks.

The second is what this repository was actually missing. The session went from
the converter straight to the vault, skipping every stage that turns a sample
into evidence — so a "reference session" referenced about half the system while
looking like coverage. axonos-signal-pipeline 0.9.1 now sits in the middle:
every frame is re-referenced against the common average before anything reads an
amplitude, screened for five independent artifact findings, and once a window
has accumulated, reduced to narrowband power at four SSVEP-shaped targets. The
argmax is deliberately not taken — choosing a target is a decision, and
decisions do not belong in a transport session.

Adding conditioning immediately found something, which is the argument for
adding it. Sixty-one per cent of frames trip the slew limit: consecutive samples
step further than physiology allows. The detector is right and the source is
wrong — SimDevice emits white noise, whose consecutive samples are independent,
where a real acquisition path is band-limited and cannot step that far between
samples. The published threshold stays and the transcript prints a NOTE saying
why, because a session that tunes its own thresholds demonstrates tuning.

The transcript is regenerated: 61 lines, each distinct finding set announced
once rather than on every alternation, with band reports and the conditioning
counters in the summary. The accounting identity still closes.

6 tests green.

v0.2.0

Toggle v0.2.0's commit message

Verified

This commit was signed with the committer’s verified signature.
AxonOS-BCI Denis Yermakou
fix!: re-pin to the corrected organs, and record what re-pinning found

The stack pinned axonos-hal v0.1.1 — the version whose stage table was
fabricated and whose utilisation ceiling had no published basis. The flagship
integration repository was demonstrating a model that had been withdrawn, and
its byte-exact transcript was byte-exact about the wrong numbers.

Re-pinned to hal v0.2.0, vault v0.2.0, supervisor v0.1.1. The transcript is
regenerated and the utilisation line moves from 24.4% to the published 17.3%,
which is the whole reason this transcript is versioned rather than quietly
refreshed.

Re-pinning found a third defect, in this crate. The session called
vault.issue(...) and discarded the boolean. When vault 0.2.0 began refusing
the old 3 200-bit grant under RFC-0009 N5, the session ran to completion with
no grant installed and reported NoSuchGrant for every reading — a silent
misconfiguration wearing the appearance of a working run, which is exactly the
class of failure this repository exists to catch. The return is now checked
and the session aborts with the reason.

The grant is 2 048 bits: sixty-four entries at the minimum charge, which is
every disclosure this vault can record. The summary reads the budget from the
grant rather than repeating a literal, so the two cannot drift again.

The test that recorded the two disagreeing bounds is rewritten to record their
closure, and now also asserts that the grant advertises the figure it
enforces.

Lockfile regenerated; verify_pins.py confirms all three tags against the live
remote. 6 tests green.

v0.1.0

Toggle v0.1.0's commit message

Verified

This commit was signed with the committer’s verified signature.
AxonOS-BCI Denis Yermakou
feat: axonos-stack 0.1.0 — the reference session, and the first thing…

… it found

Each organ is tested against the one below it; nothing tested the chain. A
chain is where the interesting failures live, because every component is
correct about its own contract and wrong about its neighbour's assumptions.

The binary wires SimDevice through the supervisor and the vault and prints a
deterministic transcript. Same seed, same bytes, any machine. CI diffs it
against reference/session-7.txt, so a dependency change that alters observable
behaviour fails with a diff of exactly what moved — a stronger statement than
a checksum, which would only describe what compiled. It also closes the
roadmap item asking for a deterministic simulator that runs the full path
without hardware; SimDevice was half of it.

On its first run the chain surfaced a defect no component test could reach.
axonos-vault has two bounds that disagree: a grant declares 3 200 bits, the
audit log holds 64 entries, and the vault refuses to release what it cannot
record — so the effective ceiling is 2 048 bits and the grant's declared
figure is not the binding one. Both behaviours are individually correct and
individually tested. The fix belongs upstream in vault 0.2; the test here
asserts the true behaviour and names it rather than asserting my assumption.

verify_pins.py exists because --locked does not do what people think. It
proves the lockfile is unchanged; it does not notice a tag repointed on the
remote, since cargo fetches the recorded revision and builds happily. This
stack is assembled from three mutable pointers with immutable-sounding names,
so the check runs first and on a daily schedule. Verified in both directions:
against the live tags, and against a deliberately altered lockfile.

6 tests driving the real binary rather than re-implementing its wiring, and
the accounting identity — delivered + lost = produced — asserted across five
seeds.