Skip to content

Commit c484f1c

Browse files
committed
fix(release): improve public documentation and release communication
Release highlights: - make Ragmir easier to adopt without hiding its technical guarantees - restore a prominent white landing headline with clear local-first positioning Release details: - **Documentation:** simplify every README and link advanced topics to focused guides - **Landing:** align concise EN/FR copy with SEO, GEO, llms.txt, and ai.txt - **Releases:** publish highlights, detailed changes, verification, and install guidance Verification: - pass pnpm validate, including tests, builds, smoke checks, publint, and artifacts - pass Linux x64, macOS ARM64, CodeQL, Commitlint, and the quality gate - verify EN/FR pages with 100 in SEO, accessibility, best practices, and agentic browsing
1 parent ac242a4 commit c484f1c

24 files changed

Lines changed: 653 additions & 952 deletions

File tree

AGENTS.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,22 @@
3737
- Package READMEs are brief npm entrypoints that link to the root README.
3838
- Keep `llms.txt` and `context7.json` aligned with public documentation and generated-output exclusions.
3939
- When code changes public behavior, commands, configuration, supported formats, architecture, or product claims, update the relevant docs and landing in the same change. For internal-only changes, verify both surfaces and leave them unchanged when no update is needed.
40+
- Lead public documentation with the value proposition, a working quick start, and the strongest
41+
guarantees. Move operational depth to focused guides instead of repeating it across READMEs.
42+
- Present team use as a positive workflow: shared sources and configuration, one local ingest per
43+
developer, then a corpus-fingerprint check. Keep low-level safeguards in the team and
44+
configuration guides rather than turning team collaboration into the dominant public section.
4045

4146
## Validation
4247

4348
- Run the smallest relevant check while editing and `pnpm validate` before a release pull request.
4449
- Reconcile `git status` with the intended scope before staging. Never stage secrets or generated local state.
4550
- Use Conventional Commits. Commit and push only when the user authorizes them.
51+
- Every commit promoted to `main` that can trigger semantic-release must include these exact body
52+
sections with at least one bullet each: `Release highlights:`, `Release details:`, and
53+
`Verification:`. Highlights state user outcomes, details group the meaningful work by product
54+
area, and verification names the gates actually run. Never reduce a release to a generic subject
55+
line or raw commit list.
4656

4757
## Code conventions
4858

CLAUDE.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pnpm example
1111

1212
Use `pnpm --filter @jcode.labs/ragmir <script>` for Core-only work. The pinned Node version lives in
1313
`mise.toml`; activate mise in your shell or run local workspace commands with that pinned version.
14-
Published packages retain their documented Node.js 20 compatibility.
14+
Published packages require Node.js 22 or later, matching their manifests and release gate.
1515

1616
## Workspace
1717

@@ -26,6 +26,16 @@ commit them. The root README is the canonical documentation entrypoint; keep pac
2626
When code changes public behavior, commands, configuration, supported formats, architecture, or
2727
product claims, update the relevant docs and landing in the same change. For internal-only changes,
2828
verify both surfaces and leave them unchanged when no update is needed.
29+
Lead public documentation with the value proposition, a working quick start, and the strongest
30+
guarantees. Move operational depth to focused guides instead of repeating it across READMEs.
31+
Present team use as a positive workflow: shared sources and configuration, one local ingest per
32+
developer, then a corpus-fingerprint check. Keep low-level safeguards in focused guides.
33+
34+
Every commit promoted to `main` that can trigger semantic-release must include these exact body
35+
sections with at least one bullet each: `Release highlights:`, `Release details:`, and
36+
`Verification:`. Highlights state user outcomes, details group meaningful work by product area,
37+
and verification names the gates actually run. Never reduce a release to a generic subject line or
38+
raw commit list.
2939

3040
## Boundaries
3141

README.md

Lines changed: 127 additions & 287 deletions
Large diffs are not rendered by default.

RELEASING.md

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Do not publish from a local machine.
1111
release pull request into `main`.
1212
4. Let the `Release npm` workflow run on `main`, or dispatch it manually from `main`.
1313
5. Approve the protected `npm-publish` environment when GitHub asks for review.
14-
6. Verify all three npm packages, GitHub release notes, and release artifacts.
14+
6. Verify all three npm packages, the curated GitHub release notes, and release artifacts.
1515
7. Build and deploy the static landing through the external deployment process, then verify the
1616
published package version and canonical site URL.
1717

@@ -25,6 +25,35 @@ does not deploy the site. The external deployment must build with the released v
2525
`PUBLIC_RAGMIR_VERSION`. Production must use `PUBLIC_RAGMIR_LANDING_URL=https://ragmir.com`; staging
2626
must use its own public URL so canonical and robots metadata cannot fall back to production.
2727

28+
## Release Notes Contract
29+
30+
The promotion commit on `main` is the public source for the GitHub release. Its body must contain
31+
these exact sections, each with at least one concise bullet:
32+
33+
```text
34+
fix(release): improve public documentation and release communication
35+
36+
Release highlights:
37+
- make Ragmir easier to understand and adopt without hiding its technical guarantees
38+
39+
Release details:
40+
- **Documentation:** shorten every README and route advanced behavior to focused guides
41+
- **Landing:** present one clear hero statement and keep SEO/GEO metadata aligned
42+
- **Release automation:** publish curated notes with highlights, details, verification, and install links
43+
44+
Verification:
45+
- pass pnpm validate and the Linux x64 and macOS ARM64 CI matrix
46+
- verify the English and French production pages in a browser
47+
```
48+
49+
`scripts/semantic-release-notes.mjs` converts those sections into a GitHub release with highlights,
50+
grouped changes, verification evidence, install commands, package links, artifacts, and a full
51+
changelog link. Semantic release stops before publishing if a release commit omits the contract.
52+
53+
Write the body from the complete `develop` to `main` delta. Mention user-visible outcomes and the
54+
substantial engineering work behind them, not file counts, implementation trivia, or a raw list of
55+
commit subjects. Keep each line within the repository's commitlint limit.
56+
2857
## Versioning Notes
2958

3059
- `feat:` creates a minor release.

context7.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
"Run `rgr doctor --fix` after upgrading or misconfiguration to repair scaffolding, `.gitignore` entries, and the agent skill install.",
3535
"Config resolves from the caller's working directory (`.ragmir/config.json`), never from the package install path.",
3636
"In a monorepo, the nearest configured ancestor is active; use `rgr bases --json` or explicit `--project-root` to verify routing.",
37-
"Ragmir has no built-in cloud sync. Teams synchronize one source-of-truth folder with an existing tool, version stable directory or glob contracts instead of generated machine-specific file lists, align the Ragmir version, configuration, embedding provider, and model, then ingest and audit separate local indexes. Compare corpusFingerprint only when both indexes are ready with no missing or stale files; matching values identify the same indexed relative paths and source bytes. Use sourceFingerprintMode strict when a sync tool can preserve metadata while replacing content. Older manifests expose a null fingerprint until the next successful ingestion.",
37+
"Teams synchronize one source-of-truth folder with Git, Drive, or their existing file workflow, commit stable source globs and Ragmir configuration, then ingest locally per developer. Align the Ragmir version and embedding settings; compare corpusFingerprint only after each index is ready with no missing or stale files. Use sourceFingerprintMode strict when synchronization can replace content without changing metadata, and keep actively written .ragmir/storage directories local to each workstation.",
3838
"Use `rgr preview` to inspect redacted chunks without writing an index, and `search(..., { explain: true })` only when rank diagnostics are needed.",
3939
"Explained searches expose a ranking-policy fingerprint, deterministic vector and lexical contributions, FTS or complete-fallback activation and reason, candidate budgets, and lexical coverage; truncated fallback scans are rejected.",
4040
"The bounded primary FTS pool uses structural context and body text. Exact file paths use a bounded scalar variant. Controlled phrase, identifier, and rare-term queries expand only an insufficient primary pool. Diversification selects distinct sources first, then backfills ranked non-duplicate, non-overlapping chunks to topK.",

llms.txt

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
# Ragmir
22

3-
Ragmir is an open-source local-first retrieval toolkit for Node.js. It indexes files selected by the
4-
project, keeps generated state under ignored local `.ragmir/` folders, and returns source-backed
5-
passages through CLI, TypeScript, or a read-focused MCP server. It does not provide a hosted document
6-
store.
7-
8-
Public subtagline: **Stop sending confidential documents directly to the cloud.**
3+
Ragmir is an open-source confidential local RAG for coding agents, scripts, and Node.js
4+
applications. It turns selected project files into cited evidence indexed and retrieved locally
5+
through CLI, TypeScript, or a read-focused MCP server. Core works offline by default, never uploads
6+
the corpus, and calls no model.
97

108
## Core facts
119

@@ -66,15 +64,13 @@ Public subtagline: **Stop sending confidential documents directly to the cloud.*
6664
vector, full-text, and relative-path index coverage.
6765
- Monorepos: the nearest configured base is active, nested indexes remain isolated, and generated MCP
6866
helpers pin a distinct base root.
69-
- Team use: Ragmir has no built-in cloud sync. Synchronize the same source-of-truth folder with an
70-
existing tool such as Google Drive or a team script, align the version, configuration, embedding
71-
provider, and model, then ingest and audit on each workstation. Missing, partial, or extra files
72-
produce different local indexes. Version stable directory or glob contracts instead of generated
73-
machine-specific file lists. Compare `corpusFingerprint` only when both indexes are ready with no
74-
missing or stale files; matching values prove the same indexed relative paths and source bytes.
75-
Use `sourceFingerprintMode: "strict"` when a sync tool can preserve metadata while replacing
76-
content. Never treat `.ragmir/storage/` as a shared database. Older manifests expose a `null`
77-
fingerprint until the next successful ingestion.
67+
- Team use: synchronize one source-of-truth folder with Git, Drive, or the team's existing file
68+
workflow, commit stable source globs and Ragmir configuration, then ingest locally per developer.
69+
Align the version and embedding settings, and compare `corpusFingerprint` only when each index is
70+
ready with no missing or stale files. Matching values confirm the same relative paths and source
71+
bytes. Use `sourceFingerprintMode: "strict"` when synchronization can preserve metadata while
72+
replacing content, and keep actively written `.ragmir/storage/` directories local to each
73+
workstation.
7874
- MCP resources: `ragmir://context` gives bounded readiness and capability context;
7975
`ragmir://sources` gives capped source detail with complete totals.
8076
- MCP safety: all ten tools advertise non-destructive behavior; every tool and resource JSON

packages/ragmir-chat/README.md

Lines changed: 25 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,17 @@
55
[![Node.js](https://img.shields.io/node/v/@jcode.labs/ragmir-chat)](https://www.npmjs.com/package/@jcode.labs/ragmir-chat)
66
[![MIT](https://img.shields.io/npm/l/@jcode.labs/ragmir-chat)](https://github.com/jcode-works/jcode-ragmir/blob/main/LICENSE)
77

8-
Optional cited answer generation with a verified local GGUF model.
9-
10-
*Stop sending confidential documents directly to the cloud.*
11-
12-
Ragmir Chat accepts passages retrieved by Core, generates on the workstation, and validates the
13-
visible citation markers. It does not discover or index project files by itself.
8+
Optional cited answer generation with a verified local GGUF model. Ragmir Chat accepts passages
9+
retrieved by Core, generates on the workstation, and validates visible citation markers. It does
10+
not discover or index project files.
1411

1512
[Project overview](https://github.com/jcode-works/jcode-ragmir#readme) ·
16-
[Offline chat guide](https://github.com/jcode-works/jcode-ragmir/blob/main/docs/offline-chat-preload.md) ·
17-
[API reference](https://github.com/jcode-works/jcode-ragmir/blob/main/docs/api-reference.md#chat-cited-local-generation)
13+
[Offline Chat guide](https://github.com/jcode-works/jcode-ragmir/blob/main/docs/offline-chat-preload.md) ·
14+
[API](https://github.com/jcode-works/jcode-ragmir/blob/main/docs/api-reference.md#chat-cited-local-generation)
1815

19-
## Use Chat with Ragmir Core
16+
## Set up and answer
2017

21-
Requires Node.js 20 or later and enough disk and memory for the selected model.
18+
Requires Node.js 22 or later and enough disk and memory for the selected model.
2219

2320
```bash
2421
npm install --save-dev @jcode.labs/ragmir @jcode.labs/ragmir-chat
@@ -29,19 +26,18 @@ npx rgr chat setup --profile fast
2926
npx rgr chat "What evidence supports this decision?" --profile fast --offline
3027
```
3128

32-
`rgr chat setup` downloads and verifies one model under `.ragmir/models/chat/<profile>`. Normal
33-
generation uses that local file and rejects remote model resolution.
29+
Setup downloads and verifies one model under `.ragmir/models/chat/<profile>`. Normal generation
30+
uses that local file and rejects remote model resolution.
3431

35-
| Profile | Pinned model | Download | Thinking | Choose it when |
36-
| --- | --- | --- | --- | --- |
37-
| `lite` | Qwen2.5 0.5B Q4_K_M | ~0.49 GB | Off | Memory and startup time matter most |
38-
| `fast` | Gemma 4 E2B Q4_0 | ~3.35 GB | Standard or deep | You want the balanced default |
39-
| `quality` | Gemma 4 E4B Q4_0 | ~5.15 GB | Standard or deep | You accept a larger model for stronger answers |
32+
| Profile | Pinned model | Download | Choose it when |
33+
| --- | --- | --- | --- |
34+
| `lite` | Qwen2.5 0.5B Q4_K_M | about 0.49 GB | Memory and startup matter most; thinking stays off |
35+
| `fast` | Gemma 4 E2B Q4_0 | about 3.35 GB | You want the balanced default |
36+
| `quality` | Gemma 4 E4B Q4_0 | about 5.15 GB | You accept a larger model for stronger answers |
4037

41-
Use the same profile for `setup`, `doctor`, and each answer. The `fast` profile is the default;
42-
`lite` always disables thinking. These are Chat profiles, not requirements of Ragmir Core, the CLI,
43-
API, or MCP server. Verify a prepared profile with
44-
`npx rgr chat doctor --profile fast --verify` before offline use.
38+
Use the same profile for setup, doctor, and generation. These are Chat profiles, not requirements
39+
of Ragmir Core, its CLI, API, or MCP server. Verify offline readiness with
40+
`npx rgr chat doctor --profile fast --verify`.
4541

4642
## TypeScript API
4743

@@ -65,23 +61,14 @@ const result = await generateChatAnswer({
6561
console.log(result.answer, result.citationStatus)
6662
```
6763

68-
If no usable source is supplied, the package returns an insufficient-context result without loading
69-
a model. The result reports citation validity and model metadata; raw model thought is never
70-
returned or persisted. Model output still needs human review for high-impact decisions.
71-
72-
Applications with their own retrieval layer can use `rgr-chat answer --context <file>`. The
73-
standalone `rgr-chat serve` command exposes a local line-delimited JSON process, not an HTTP server.
74-
75-
## Privacy boundary
76-
77-
Normal generation sends retrieved passages only to the local model process. The explicit setup step
78-
may download public model weights, never project documents. Keep model state and generated output
79-
under ignored `.ragmir/` paths. A hosted agent that displays or consumes the answer remains subject
80-
to that provider's data policy.
64+
No usable source returns an insufficient-context result without loading a model. Results include
65+
citation validity and model metadata; raw model thought is never returned or persisted. Human
66+
review remains necessary for high-impact decisions. Applications with another retrieval layer can
67+
use `rgr-chat answer --context <file>`; `rgr-chat serve` is a local line-delimited JSON process, not
68+
an HTTP server.
8169

82-
Read the [project documentation](https://github.com/jcode-works/jcode-ragmir/wiki) and
83-
[troubleshooting guide](https://github.com/jcode-works/jcode-ragmir/blob/main/docs/troubleshooting.md)
84-
for the complete workflow.
70+
Model setup may download public weights, never project documents. Normal generation sends retrieved
71+
passages only to the local model process. Keep models and outputs under ignored `.ragmir/` paths.
8572

8673
Ragmir Chat is open source under the [MIT License](https://github.com/jcode-works/jcode-ragmir/blob/main/LICENSE).
87-
Selected GGUF models carry their own pinned license metadata.
74+
Selected GGUF models keep their own pinned license metadata.

0 commit comments

Comments
 (0)