Skip to content

atlas-search: nix packaging + disabled deploy (step 5, #5355) - #5439

Merged
dezren39 merged 3 commits into
mainfrom
atlas-step5-packaging
Nov 4, 2026
Merged

dezren39 merged 3 commits into
mainfrom
atlas-step5-packaging

Conversation

@dezren39

@dezren39 dezren39 commented Nov 4, 2026 •

Copy link
Copy Markdown
Member

Atlas step 5 of epic #5350 (issue #5355): nix packaging + deploy of the atlas-search binary, landed disabled. Activation (enable + start + client cutover) is step 6, #5356.

What lands

  • atlas-search fetch-model (new verb): provisions the pinned Snowflake snapshot per Drew's Q1 ruling — HF Snowflake/snowflake-arctic-embed-m-v2.0 @ rev 95c2741480856aa9666782eb4afe11959938017f, only the two files the embedder loads, sha256 recorded in-source (tokenizer.json f1cc44ad…, onnx/model.onnx c0c53d7f…) — into ~/.local/state/atlas-search/model/<rev>/. Streamed download with inline hash, verify-before-install, staging dir + atomic rename promote, idempotent no-op on a verifying snapshot, loud refusal on mismatch, and a mkdir provisioning lock so concurrent runs can't interleave writes into the shared staging dir (race observed live during verification; a killed run leaves the lock and the error says how to clear it). Explicitly NOT a nix FOD.
  • Nix package pkgs/atlas-search (+ standalone sub-flake): buildRustPackage on the repo-pinned rust-overlay toolchain. The closure carries onnxruntime; ATLAS_SEARCH_ORT_LIB_DEFAULT bakes its libonnxruntime.so path into the binary as the last resolve_ort_lib fallback, so no host LD_LIBRARY_PATH is needed. doInstallCheck runs fixtures/smoke_check.py: FTS + hybrid envelopes byte-compared against the Python recordings, plus an ORT-load probe proving ort::init_from succeeds from the baked path.
  • Home wiring: systemd.user.services.atlas-search (serve, 127.0.0.1:18760 — inventoried free against the 18742–18752 proxy range and live listeners) with no Install section — it cannot be enabled until step 6 adds WantedBy, runs init for the real client tokens, and creates the tailscale serve mapping (recorded in the unit comment; serve config is imperative tailscaled state, no declarative precedent in the repo). The package is deliberately not in home.packages: the Python wrapper stays the resolved atlas-search CLI until cutover.

Verification (from the packaged artifact, clean env)

  • Package builds green; in-build cargo tests pass; install-check smoke: PASS fts_default, PASS hybrid_default, PASS ort load. Home eval converges to the same store output; unit JSON has Service+Unit keys only (no Install).
  • Closure (nix-store -qR): onnxruntime-1.27.1, gcc-16.2.0-lib (libstdc++.so.6), zlib-1.3.2.
  • fetch-model run on the laptop: both files sha256-verified into the real state dir (independently re-hashed with sha256sum); re-run is a verified no-op (mtime unchanged).
  • Clean-env (env -i, HOME+PATH only) standalone search against production read-only matches the Python CLI's top-10 exactly, back-to-back (the corpus is being rewritten live by the index work, so sequential comparisons minutes apart can legitimately differ; controlled back-to-back runs agree).
  • Scratch serve E2E on a scratch port: init writes service.json 0600 with the v1 client table; /health 200; via-service search works; an identical repeat is a dedupe hit (17.5s → 0.0s, identical results); scratch service stopped, port released.
  • Landed state: nothing listening on 18760, no live atlas-search unit (is-enabled: not-found), no real ~/.config/atlas-search/client.json, Python wrapper untouched.

Note: nixpkgs' onnxruntime is 1.27.1 vs the Python pipeline's 1.31.1 — numeric bit-identity adjudication belongs to step 6's Gate B golden parity, not this step.

🤖 Generated with Claude Code


Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.

developing-today[bot] added 3 commits November 4, 2026 06:11
…ult (step 5, #5355)

fetch-model provisions the pinned Snowflake snapshot (HF rev 95c2741480856aa9666782eb4afe11959938017f; tokenizer.json + onnx/model.onnx, sha256 recorded in-source per the Q1 ruling — state-dir fetch, not a nix FOD) into ~/.local/state/atlas-search/model/<rev>/: streamed download with inline sha256, verify-before-install, staging dir + atomic rename promote, idempotent no-op on a verifying snapshot, loud refusal on hash mismatch, and a mkdir provisioning lock so concurrent runs cannot interleave writes into the shared staging dir (race observed live during step-5 verification; a killed run leaves the lock and the error says how to clear it). resolve_ort_lib gains a final compile-time fallback from ATLAS_SEARCH_ORT_LIB_DEFAULT so the nix package bakes its closure onnxruntime path in. Fixtures: make_fixture_db.py + smoke_check.py, the install-check harness (FTS/hybrid envelopes byte-compared to the Python recordings; ORT-load probe proves ort::init_from succeeds from the baked path).
buildRustPackage on the repo-pinned rust-overlay toolchain (rust-toolchain.toml via the sub-flake and via the home wiring), cargoLock from the workspace lockfile. The closure carries onnxruntime (env ATLAS_SEARCH_ORT_LIB_DEFAULT points at its libonnxruntime.so; libstdc++/libz ride the stdenv closure and the ORT lib itself), so the packaged binary needs no host LD_LIBRARY_PATH. doInstallCheck runs fixtures/smoke_check.py against the built binary. flake.nix is a thin standalone wrapper (nixpkgs + rust-overlay + flake-utils) so the package also builds outside the fleet flake.
systemd.user.services.atlas-search runs the packaged binary (serve, default 127.0.0.1:18760 — inventoried free against the 18742-18752 proxy range and live listeners). Landed DISABLED: no Install section, so the unit cannot be enabled until step 6 (#5356) adds WantedBy, runs init for the real client tokens, and creates the tailscale serve mapping (recorded in the unit comment; serve state is imperative tailscaled state with no declarative precedent in the repo). The package is deliberately not in home.packages: the Python wrapper at ~/.local/bin/atlas-search remains the resolved atlas-search CLI until the step-6 cutover.
@dezren39
dezren39 requested a review from a team as a code owner November 4, 2026 12:28
@coderabbitai

coderabbitai Bot commented Nov 4, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 55 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 787a55d5-708f-4c2f-8a82-6bd073754b44
Commits

Reviewing files that changed from the base of the PR and between 06fcdb6 and 462ed22.

Files ignored due to path filters: 2
  • pkgs/atlas-search/Cargo.lock is excluded by !**/*.lock
  • pkgs/atlas-search/flake.lock is excluded by !**/*.lock
Files selected for processing: 8
  • home/common/default.nix
  • pkgs/atlas-search/crates/atlas-search/Cargo.toml
  • pkgs/atlas-search/crates/atlas-search/src/fetch_model.rs
  • pkgs/atlas-search/crates/atlas-search/src/main.rs
  • pkgs/atlas-search/default.nix
  • pkgs/atlas-search/fixtures/make_fixture_db.py
  • pkgs/atlas-search/fixtures/smoke_check.py
  • pkgs/atlas-search/flake.nix
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@dezren39
dezren39 merged commit 2b39005 into main Nov 4, 2026
3 checks passed
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-04T12:29:14.808813Z 462ed22 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Sign up for free to 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