Skip to content

release: v0.2.0 - #20

Closed
ajianaz wants to merge 12 commits into
mainfrom
develop
Closed

release: v0.2.0#20
ajianaz wants to merge 12 commits into
mainfrom
develop

Conversation

@ajianaz

Copy link
Copy Markdown
Contributor

Promote v0.2.0 to production mirror.

Since v0.1.1

ajianazand others added 12 commits August 26, 2026 09:10
* chore: align .cora.yaml with current cora schema
The old file used `review.enabled`, which the current cora binary
rejects (unknown field), silently disabling pre-commit review.
Mirrors the uteke .cora.yaml structure with vecq-specific rules
(determinism, zero-dependency core).
* fix: gate NEON-only bindings behind cfg(aarch64)
bpv and q_rot are only used on the NEON path; on x86_64 builds they
were unused variables, failing clippy -D warnings in CI.
* fix: restore bpv under cfg(aarch64), verify local clippy clean
* fix: gate NEON test bindings behind cfg(aarch64) for x86_64 builds
* fix: cfg-gate remaining NEON test bindings
* fix: cfg-gate the NEON parity test at function level
---------
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
* chore: align .cora.yaml with current cora schema (#4) (#5)
* chore: align .cora.yaml with current cora schema
The old file used `review.enabled`, which the current cora binary
rejects (unknown field), silently disabling pre-commit review.
Mirrors the uteke .cora.yaml structure with vecq-specific rules
(determinism, zero-dependency core).
* fix: gate NEON-only bindings behind cfg(aarch64)
bpv and q_rot are only used on the NEON path; on x86_64 builds they
were unused variables, failing clippy -D warnings in CI.
* fix: restore bpv under cfg(aarch64), verify local clippy clean
* fix: gate NEON test bindings behind cfg(aarch64) for x86_64 builds
* fix: cfg-gate remaining NEON test bindings
* fix: cfg-gate the NEON parity test at function level
---------
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
* ci: add release workflow (crates.io publish via tag, uteke pattern)
---------
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
* chore: align .cora.yaml with current cora schema (#4) (#5)
* chore: align .cora.yaml with current cora schema
The old file used `review.enabled`, which the current cora binary
rejects (unknown field), silently disabling pre-commit review.
Mirrors the uteke .cora.yaml structure with vecq-specific rules
(determinism, zero-dependency core).
* fix: gate NEON-only bindings behind cfg(aarch64)
bpv and q_rot are only used on the NEON path; on x86_64 builds they
were unused variables, failing clippy -D warnings in CI.
* fix: restore bpv under cfg(aarch64), verify local clippy clean
* fix: gate NEON test bindings behind cfg(aarch64) for x86_64 builds
* fix: cfg-gate remaining NEON test bindings
* fix: cfg-gate the NEON parity test at function level
---------
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
* release: v0.1.1 crates.io publish pipeline (#7)
* chore: align .cora.yaml with current cora schema (#4)
* chore: align .cora.yaml with current cora schema
The old file used `review.enabled`, which the current cora binary
rejects (unknown field), silently disabling pre-commit review.
Mirrors the uteke .cora.yaml structure with vecq-specific rules
(determinism, zero-dependency core).
* fix: gate NEON-only bindings behind cfg(aarch64)
bpv and q_rot are only used on the NEON path; on x86_64 builds they
were unused variables, failing clippy -D warnings in CI.
* fix: restore bpv under cfg(aarch64), verify local clippy clean
* fix: gate NEON test bindings behind cfg(aarch64) for x86_64 builds
* fix: cfg-gate remaining NEON test bindings
* fix: cfg-gate the NEON parity test at function level
---------
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
* ci: add release workflow (crates.io publish via tag) (#6)
* chore: align .cora.yaml with current cora schema (#4) (#5)
* chore: align .cora.yaml with current cora schema
The old file used `review.enabled`, which the current cora binary
rejects (unknown field), silently disabling pre-commit review.
Mirrors the uteke .cora.yaml structure with vecq-specific rules
(determinism, zero-dependency core).
* fix: gate NEON-only bindings behind cfg(aarch64)
bpv and q_rot are only used on the NEON path; on x86_64 builds they
were unused variables, failing clippy -D warnings in CI.
* fix: restore bpv under cfg(aarch64), verify local clippy clean
* fix: gate NEON test bindings behind cfg(aarch64) for x86_64 builds
* fix: cfg-gate remaining NEON test bindings
* fix: cfg-gate the NEON parity test at function level
---------
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
* ci: add release workflow (crates.io publish via tag, uteke pattern)
---------
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
---------
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
* chore: bump version to 0.1.1 for first crates.io release
---------
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
* ci: add cora AI code review workflow (parity with uteke)
Runs codecoradev/cora-review-action@v1 on every PR targeting
develop or main, posting AI review feedback using org CORA_*
secrets, matching the uteke repo reference workflow.
Signed-off-by: ajianaz <ajianaz@users.noreply.github.com>
* chore: retrigger CI to verify cora review secrets
Signed-off-by: ajianaz <ajianaz@users.noreply.github.com>
---------
Signed-off-by: ajianaz <ajianaz@users.noreply.github.com>
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
dependabot PR authors have user.login `dependabot[bot]`, not
`app/dependabot`, so the old skip list never matched and the CLA
job failed every dependabot PR. Switch to an exact allowlist of
trusted bot logins (dependabot/renovate/github-actions); the legacy
app/* forms stay as fallbacks. A substring [bot] match was rejected
in review — it would exempt arbitrary third-party GitHub Apps.
Signed-off-by: ajianaz <ajianaz@users.noreply.github.com>
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
Bumps [rand](https://github.com/rust-random/rand) from 0.8.8 to 0.10.2.
- [Release notes](https://github.com/rust-random/rand/releases)
- [Changelog](https://github.com/rust-random/rand/blob/master/CHANGELOG.md)
- [Commits](rust-random/rand@0.8.8...0.10.2)
---
updated-dependencies:
- dependency-name: rand
dependency-version: 0.10.2
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/github-script](https://github.com/actions/github-script) from 7 to 9.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](actions/github-script@v7...v9)
---
updated-dependencies:
- dependency-name: actions/github-script
dependency-version: '9'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore(cora): raise review llm max_tokens to 16384
glm-5.3 is a reasoning model; on dependency-lockfile diffs the default
4096-token budget is exhausted during reasoning (finish_reason=length,
content=null), which made the CI cora-review fallback SARIF fire on
PRs #2/#3. 16384 leaves room for reasoning plus the verdict.
Signed-off-by: ajianaz <ajianaz@users.noreply.github.com>
* chore: retrigger CI
Signed-off-by: ajianaz <ajianaz@users.noreply.github.com>
---------
Signed-off-by: ajianaz <ajianaz@users.noreply.github.com>
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
Adds the keyed layer requested for incremental integrators (issue #10,
unblocks the cora-code adoption audit):
- add_keyed(key, v): insert-or-replace under a stable u64 key
(usearch-style), returns the slot index
- remove_keyed(key) -> bool: tombstones the slot; storage stays in
place so slot indices remain stable until compact()
- search_keyed(q, k): top-k by key, tombstones skipped
- compact(): rebuilds in place, dropping tombstones (keys preserved,
slot indices shift)
- key_of/contains_key/slots/tombstones introspection helpers
- len()/is_empty() now report live vectors
- to_bytes() writes live slots only: tombstones are dropped on disk
without disturbing in-memory slot indices. File format unchanged
(v1.1); keys are an in-memory concern — persist key->slot mappings
in your own metadata store.
NEON4 batch scoring is untouched: tombstoned slots are still scored
to keep batches dense, then filtered before entering the top-k heap,
preserving bit-identical results. TDD: 7 new tests cover keyed
search, replace, stability across remove/serialize, compaction,
drained indexes, keyed adds after a file load, and dim-mismatch
panics.
Signed-off-by: ajianaz <ajianaz@users.noreply.github.com>
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
…tested) (#17)
* feat(core): x86_64 AVX2 scoring path, bit-identical to scalar (#11)
Adds an explicit AVX2 nibble-gather scoring path mirroring the NEON
one, selected at runtime with is_x86_feature_detected! (AVX2 is not
baseline on x86_64):
- score_avx2: 8 lanes = 8 scalar buckets; per 8-byte block, lane j
computes q[2b]*lut[lo_b] + q[2b+1]*lut[hi_b] (mul, mul, add — no
FMA) and accumulates in block order, then the same pairwise-tree
reduction — structurally identical to the scalar loop, so results
are bit-identical
- score_avx24: 4-vector batch sharing the q deinterleave
- LUT gather via vgatherdps (scale 4, nibble indices); q even/odd
deinterleave via shuffle_ps + vpermps fixup
- search() dispatches to the AVX2 batch when available; score()
dispatches per call
Bit-identity is enforced by new tests (avx2_matches_scalar_bitwise,
avx24_matches_avx2_bitwise, search dispatch == scalar) including a
dim-8 case covering the 4-byte tail. The x86_64 CI job runs these on
native AVX2 hardware (Rosetta hides AVX2 via CPUID, so local emulated
runs cannot exercise the path).
docs/BENCHMARK.md: per-architecture scoring-path table; x86_64
numbers explicitly pending native measurement, Rosetta excluded.
Signed-off-by: ajianaz <ajianaz@users.noreply.github.com>
* fix(clippy): iterate acc via enumerate in score_avx24 batch loop
clippy 1.98 (CI stable) flags the 0..4 indexing loop under
needless_range_loop; local 1.89 does not. Same semantics.
Signed-off-by: ajianaz <ajianaz@users.noreply.github.com>
---------
Signed-off-by: ajianaz <ajianaz@users.noreply.github.com>
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
Adds docs/SQLITE.md: when to embed the index vs standalone file, the
single-row and per-shard schema shapes, save/load with rusqlite in one
transaction, atomicity notes (WAL + synchronous=NORMAL — no manual
checkpoint choreography needed for correctness), measured save/load
latencies at 1k/10k/50k vectors (dim 768, ~514 B/vec), and pitfalls
(memory duplication on load, slot stability across save/reload
interacting with the keyed API, churn-heavy workloads, embed size
threshold, seed discipline).
README links the page and mentions the per-architecture scoring-path
matrix in BENCHMARK.md.
Signed-off-by: ajianaz <ajianaz@users.noreply.github.com>
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
Signed-off-by: ajianaz <ajianaz@users.noreply.github.com>
Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
@ajianaz

Copy link
Copy Markdown
ContributorAuthor

Superseded by #21 (release branch with main merged in to resolve the squash-release divergence on main).

@ajianazajianaz closed this Aug 28, 2026
@ajianazajianaz mentioned this pull request Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ajianaz