85c5912101
* feat(addons): unified distribution Phase 2 — addon publish + hosted installs + registry snapshots
GH #724/#726. Client-side publish flow and registry consolidation:
- `lean-ctx addon publish --namespace <ns>`: wraps lean-ctx-addon.toml
verbatim into a signed kind=addon .ctxpkg after local gates that mirror
the hosted listing bar (schema, runnable [mcp], audit — blocking findings
refuse, review publishes disclosed; --check = all gates, no network).
- `lean-ctx addon add <ns>/<name>[@version]`: resolves hosted packs —
index-verified download, integrity + mandatory ed25519 signature +
kind↔payload coherence — then the embedded manifest walks the unchanged
consent → preflight → health-probe pipeline; `addon update` re-resolves
from the install source (ctxpkg: sources unpinned to latest non-yanked).
- kind↔payload coherence (validate_kind_coherence) enforced in verify,
import and the publish self-check; the context registry refuses
kind=addon packs (wrong trust chain, points at `addon add`).
- Bundled registries become generated snapshots: gen_registry validates,
sorts and canonicalizes rust/data/{addon,grammar}_registry.json;
drift fails CI + preflight + a lib test (deterministic, #498).
Co-authored-by: Cursor <cursoragent@cursor.com>
* chore: normalize EOF newlines (whitespace gate)
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(ci): pin registry snapshots to LF — Windows checkouts broke the byte-identical canonicality gate (#726)
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs(spec): record shipped server-side kind support in unified-distribution Phase 2 (#726)
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Yves Gugger <7590809+yvgude@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
19 lines
901 B
Plaintext
19 lines
901 B
Plaintext
# Code-generated reference docs are emitted with LF by `gen_docs`. Pin them to
|
|
# LF on every platform so the docs-drift gate (`cargo test` + `gen_docs --check`)
|
|
# is byte-stable — Windows checkouts would otherwise convert them to CRLF and
|
|
# fail the comparison.
|
|
docs/reference/generated/*.md text eol=lf
|
|
|
|
# Testbench fixtures, suites, recordings and lock feed `RecordedRunner` replay
|
|
# keys verbatim (file bytes are embedded into the assembled context that is
|
|
# hashed). Pin them to LF so Windows checkouts don't convert them to CRLF and
|
|
# break the byte-identical key match (off-vs-on testbench, #611/#498).
|
|
rust/eval/testbench/** text eol=lf
|
|
|
|
# Registry snapshots are generated by `gen_registry` with LF and compared
|
|
# byte-for-byte in CI and lib tests (GH #726). Same rationale as the
|
|
# generated docs above.
|
|
rust/data/addon_registry.json text eol=lf
|
|
rust/data/grammar_registry.json text eol=lf
|
|
|