| fix: support browser requests through the ticket gate | Dami | | +140 | -52 | |
| Merge pull request #18 from FelineStateMachine/release/0.5.0 | FelineStateMachine | | +3 | -3 | |
| release: 0.5.0 | Dami | | +3 | -3 | |
| Merge pull request #17 from FelineStateMachine/feat/connection-observability | FelineStateMachine | | +238 | -13 | |
| feat(node): connection observability — last-seen per ticket, gated-connection status | Dami | | +238 | -13 | |
| Merge pull request #16 from FelineStateMachine/feat/pop-tickets | FelineStateMachine | | +671 | -20 | |
| feat(gate): proof-of-possession sync tickets | Dami | | +671 | -20 | |
| Merge pull request #15 from FelineStateMachine/release/0.4.0 | FelineStateMachine | | +3 | -3 | |
| release: 0.4.0 | Dami | | +3 | -3 | |
| Merge pull request #13 from FelineStateMachine/feat/write-expiry-groundwork | FelineStateMachine | | +564 | -17 | |
| docs: reframe the expiry design record as the reference spec for lofi#145 | Dami | | +27 | -10 | |
| docs(site): the four-code taxonomy and the mechanism-neutral expiry contract | Dami | | +43 | -26 | |
| feat(verdict): classify transaction_conflict and permissions_head_missing as permanent | Dami | | +358 | -9 | |
| docs: draft the upstream ask for server-enforced write expiry | Dami | | +91 | -0 | |
| docs(site): the expiry contract on the write-verdicts page | Dami | | +64 | -4 | |
| feat(verdict): register expired as a permanent code | Dami | | +14 | -1 | |
| Merge pull request #11 from FelineStateMachine/feat/write-verdict-foundations | FelineStateMachine | | +595 | -8 | |
| docs(site): write verdicts and the health/connection contract | Dami | | +113 | -8 | |
| test(health): GET /health answers in open, ticket, and peer modes | Dami | | +147 | -0 | |
| test(verdict): write-rejection harness — correlation, reconnect re-derivation, determinism | Dami | | +249 | -0 | |
| feat(verdict): mutation-error taxonomy — permanent vs transient, keyed by code | Dami | | +86 | -0 | |
| Merge pull request #9 from FelineStateMachine/release/0.3.0 | FelineStateMachine | | +9 | -5 | |
| release: 0.3.0 | Dami | | +9 | -5 | |
| Merge pull request #8 from FelineStateMachine/docs/contract-and-operator-pass | FelineStateMachine | | +79 | -25 | |
| docs: neutral posture — no issue references or self-history in rendered docs | Dami | | +9 | -12 | |
| docs: finish the contract-accuracy pass and the operator hardening docs | Dami | | +70 | -13 | |
| Merge pull request #7 from FelineStateMachine/docs/convergence-validated | FelineStateMachine | | +9 | -7 | |
| docs: browser convergence is validated against lofi-node | Dami | | +9 | -7 | |
| Merge pull request #6 from FelineStateMachine/docs/adopt-site-pages | FelineStateMachine | | +928 | -0 | |
| Merge pull request #5 from FelineStateMachine/docs/ticket-custody-accuracy | FelineStateMachine | | +9 | -4 | |
| docs: adopt the site-voice node pages | Dami | | +928 | -0 | |
| docs: state ticket custody as the app actually ships it | Dami | | +9 | -4 | |
| Merge pull request #4 from FelineStateMachine/feat/scope-down-ticket-exchange | FelineStateMachine | | +309 | -18 | |
| feat: scope-down ticket exchange — derive a sync ticket from a provision one | Dami | | +309 | -18 | |
| Merge pull request #3 from FelineStateMachine/fix/secret-file-permissions | FelineStateMachine | | +94 | -6 | |
| fix: owner-only modes for secret files (config.json 0600, data dir 0700) | Dami | | +94 | -6 | |
| chore: package description without em dashes | Dami | | +1 | -1 | |
| release: v0.2.1 | Dami | | +3 | -3 | |
| feat: container image — Dockerfile, compose reference, CI smoke, GHCR publish | Dami | | +193 | -8 | |
| release: v0.2.0 | Dami | | +3 | -3 | |
| feat: relay election as a first-class config field | Dami | | +256 | -8 | |
| docs: banner on the README; defer guides to lofi.host/node | Dami | | +25 | -75 | |
| docs: GitHub social banner in the site's /node visual language | Dami | | +0 | -0 | |
| release: v0.1.3 | Dami | | +3 | -3 | |
| docs: note the minimum-dependency-age window for fresh releases; soften dx probe warning | Dami | | +6 | -1 | |
| fix: createRequire must not use import.meta.url (https under JSR); v0.1.2 | Dami | | +13 | -5 | |
| fix: deno eval flags precede the code string | Dami | | +1 | -1 | |
| fix: registry smoke must bypass the minimum-dependency-age gate for the just-published version | Dami | | +6 | -4 | |
| docs: JSR score pass — entrypoint module docs + full symbol JSDoc; v0.1.1 | Dami | | +111 | -14 | |
| fix: make release:artifacts output fmt-stable (freshness gate tripped on trailing commas) | Dami | | +1 | -1 | |
| fix: drop unused MeshUnavailableError import (CI lint) | Dami | | +0 | -1 | |
| feat: JSR publish pipeline for @nzip/lofi-node v0.1.0 | Dami | | +313 | -41 | |
| feat: provision-scoped tickets, store-status preflight, gate parity (#2) | Dami | | +646 | -28 | |
| fix: lint findings from CI's newer deno (type-only import, unused assert) | Dami | | +2 | -2 | |
| feat: app-connect tickets + access gate + user-chosen storage (BYOS MVP) | Dami | | +1425 | -62 | |
| chore: open-source readiness — license, CI, contributing, docs | Dami | | +410 | -248 | |
| feat: deno compile packaging — one self-contained binary | Dami | | +73 | -23 | |
| feat: runtime pair() — late upstream election without restart | Dami | | +83 | -14 | |
| feat: prebuilt matrix — macOS arm64 + Linux x86_64/aarch64 | Dami | | +14 | -9 | |
| feat: surface live tunnel connection stats in SyncNodeStatus.mesh | Dami | | +156 | -4 | |
| feat: replace db-iroh-ffi with vendored port of upstream iroh-ffi (iroh-js) | Dami | | +7222 | -326 | |
| docs: plan the port of upstream iroh-ffi (iroh-js) as the native layer | Dami | | +148 | -15 | |
| feat: HTTP-over-iroh proxy in tunnel + convergence fixtures pass | Dami | | +757 | -10 | |
| feat: self-hostable Jazz sync node with iroh transport (prove-out) | Dami | | +1507 | -0 | |