Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ body:
attributes:
label: Qarinah version
description: Output of `npm view qarinah version` and the installed version.
placeholder: "0.1.6"
placeholder: "0.1.7"
validations:
required: true
- type: dropdown
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-npm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
version:
description: Exact package version to publish
required: true
default: 0.1.6
default: 0.1.7
type: string
expected_git_commit:
description: Exact reviewed lowercase 40-character commit SHA
Expand Down
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ cff-version: 1.2.0
message: "If you use Qarinah, please cite the software and its technical white paper."
title: "Qarinah"
type: software
version: 0.1.6
version: 0.1.7
license: Apache-2.0
authors:
- family-names: "N B"
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -360,15 +360,15 @@ The repository also runs `npm run mcp:smoke` against the exact bundled Codex and

### Install once, initialize each project

Install the reviewed `v0.1.6` plugin once in each host after that release is published:
Install the reviewed `v0.1.7` plugin once in each host after that release is published:

```sh
# Codex: personal installation, available to opted-in projects.
codex plugin marketplace add AjnasNB/qarinah --ref v0.1.6
codex plugin marketplace add AjnasNB/qarinah --ref v0.1.7
codex plugin add qarinah@qarinah

# Claude Code: personal installation across projects.
claude plugin marketplace add AjnasNB/qarinah@v0.1.6 --scope user
claude plugin marketplace add AjnasNB/qarinah@v0.1.7 --scope user
claude plugin install qarinah@qarinah --scope user
```

Expand Down
2 changes: 1 addition & 1 deletion codemeta.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"@type": "SoftwareSourceCode",
"name": "Qarinah",
"description": "Evidence-linked local project memory for coding agents with deterministic retrieval, cited context packs, temporal authority, and verifiable handoffs.",
"version": "0.1.6",
"version": "0.1.7",
"license": "https://spdx.org/licenses/Apache-2.0",
"codeRepository": "https://github.com/AjnasNB/qarinah",
"issueTracker": "https://github.com/AjnasNB/qarinah/issues",
Expand Down
6 changes: 3 additions & 3 deletions docs/API-REFERENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { captureClaudeHook } from "qarinah/claude";
import { createMcpServer, runMcpServer } from "qarinah/mcp";
```

The declarations shipped in `types/index.d.ts`, `types/codex.d.ts`, `types/claude.d.ts`, and `types/mcp.d.ts` are the exact compile-time contract for version 0.1.6. JSON Schemas are available through package exports such as `qarinah/schemas/event.json`.
The declarations shipped in `types/index.d.ts`, `types/codex.d.ts`, `types/claude.d.ts`, and `types/mcp.d.ts` are the exact compile-time contract for version 0.1.7. JSON Schemas are available through package exports such as `qarinah/schemas/event.json`.

## Runtime boundary

Expand Down Expand Up @@ -61,9 +61,9 @@ Invalid JavaScript argument shapes generally throw `TypeError`. Storage, trust,

## Version and contract constants

| Export | Value in 0.1.6 |
| Export | Value in 0.1.7 |
| --- | --- |
| `QARINAH_VERSION` | `"0.1.6"` |
| `QARINAH_VERSION` | `"0.1.7"` |
| `EVENT_SCHEMA_VERSION` | `"qarinah.event.v1"` |
| `CONTEXT_PACK_SCHEMA_VERSION` | `"qarinah.context-pack.v2"` |
| `CONFIG_SCHEMA_VERSION` | `"qarinah.config.v1"` |
Expand Down
2 changes: 1 addition & 1 deletion docs/ECOSYSTEM-LAUNCH.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Re-check registries and repositories immediately before publishing. As of the da
| Maqam | `0.3.2` is the stable GitHub and npm release | Ready for demos that use only documented guarantees |
| ProductLoop | `0.2.3` is the stable GitHub and npm release | Present as orchestration, not a second flagship launch |
| Cockroach Crawler | `0.3.0` is the stable GitHub and npm `latest` release | Ready for bounded-crawl, provider-routing, optional reach, browser-host, and restricted serverless demos within documented limits |
| Qarinah | `0.1.6` release | Publish only the reviewed source, package, paper, and website from one exact commit |
| Qarinah | `0.1.7` release | Publish only the reviewed source, package, paper, and website from one exact commit |

Never describe a local candidate as published until the registry, tag, and public verification agree.

Expand Down
2 changes: 1 addition & 1 deletion docs/FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ Installing models or using external AI providers remains outside Qarinah's respo

## Which Node.js versions are supported?

Qarinah 0.1.6 supports maintained Node.js 22, 24, and 26 releases:
Qarinah 0.1.7 supports maintained Node.js 22, 24, and 26 releases:

```sh
node --version
Expand Down
12 changes: 6 additions & 6 deletions docs/HOST-INTEGRATIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,21 @@ The host plugin and the project ledger have different scopes:
Install the version-pinned stable release for personal use across projects:

```powershell
codex plugin marketplace add AjnasNB/qarinah --ref v0.1.6
codex plugin marketplace add AjnasNB/qarinah --ref v0.1.7
codex plugin add qarinah@qarinah

claude plugin marketplace add AjnasNB/qarinah@v0.1.6 --scope user
claude plugin marketplace add AjnasNB/qarinah@v0.1.7 --scope user
claude plugin install qarinah@qarinah --scope user
```

Claude Code also supports repository-shared `project` scope and gitignored per-user `local` scope:

```powershell
claude plugin marketplace add AjnasNB/qarinah@v0.1.6 --scope project
claude plugin marketplace add AjnasNB/qarinah@v0.1.7 --scope project
claude plugin install qarinah@qarinah --scope project

# Or keep the enablement personal to this repository.
claude plugin marketplace add AjnasNB/qarinah@v0.1.6 --scope local
claude plugin marketplace add AjnasNB/qarinah@v0.1.7 --scope local
claude plugin install qarinah@qarinah --scope local
```

Expand Down Expand Up @@ -125,10 +125,10 @@ claude plugin install qarinah@qarinah --scope local
The version-pinned install flow is:

```powershell
codex plugin marketplace add AjnasNB/qarinah --ref v0.1.6
codex plugin marketplace add AjnasNB/qarinah --ref v0.1.7
codex plugin add qarinah@qarinah

claude plugin marketplace add AjnasNB/qarinah@v0.1.6
claude plugin marketplace add AjnasNB/qarinah@v0.1.7
claude plugin install qarinah@qarinah
```

Expand Down
12 changes: 6 additions & 6 deletions docs/MCP-GUIDE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# MCP guide

Qarinah 0.1.6 includes a native, zero-write Model Context Protocol server. It always provides local ledger status and integrity diagnostics. It provides `context.query` only after the user creates an explicit permit bound to the exact workspace, current consent-policy hash, and response ceilings.
Qarinah 0.1.7 includes a native, zero-write Model Context Protocol server. It always provides local ledger status and integrity diagnostics. It provides `context.query` only after the user creates an explicit permit bound to the exact workspace, current consent-policy hash, and response ceilings.

That narrow boundary is intentional:

Expand All @@ -15,7 +15,7 @@ That narrow boundary is intentional:
| --- | --- |
| MCP name | `io.github.AjnasNB/qarinah` |
| npm package | `qarinah` |
| Version | `0.1.6` |
| Version | `0.1.7` |
| Transport | `stdio` |
| CLI entry | `npx qarinah mcp` |
| Default tools | `context_status`, `context_doctor` |
Expand Down Expand Up @@ -64,7 +64,7 @@ For a host configuration that accepts an MCP command object:
"mcpServers": {
"qarinah-context": {
"command": "npx",
"args": ["-y", "qarinah@0.1.6", "mcp"]
"args": ["-y", "qarinah@0.1.7", "mcp"]
}
}
}
Expand Down Expand Up @@ -105,7 +105,7 @@ The packaged Codex integration defines:
Install the reviewed release:

```sh
codex plugin marketplace add AjnasNB/qarinah --ref v0.1.6
codex plugin marketplace add AjnasNB/qarinah --ref v0.1.7
codex plugin add qarinah@qarinah
```

Expand Down Expand Up @@ -147,14 +147,14 @@ The packaged Claude integration defines:
Install:

```sh
claude plugin marketplace add AjnasNB/qarinah@v0.1.6 --scope user
claude plugin marketplace add AjnasNB/qarinah@v0.1.7 --scope user
claude plugin install qarinah@qarinah --scope user
```

Project and local scopes are also supported by Claude Code:

```sh
claude plugin marketplace add AjnasNB/qarinah@v0.1.6 --scope project
claude plugin marketplace add AjnasNB/qarinah@v0.1.7 --scope project
claude plugin install qarinah@qarinah --scope project
```

Expand Down
4 changes: 2 additions & 2 deletions docs/RECIPES.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,12 @@ If direct coverage fails, inspect the error instead of silently relaxing the gat
Install the reviewed host integrations:

```sh
codex plugin marketplace add AjnasNB/qarinah --ref v0.1.6
codex plugin marketplace add AjnasNB/qarinah --ref v0.1.7
codex plugin add qarinah@qarinah
```

```sh
claude plugin marketplace add AjnasNB/qarinah@v0.1.6 --scope user
claude plugin marketplace add AjnasNB/qarinah@v0.1.7 --scope user
claude plugin install qarinah@qarinah --scope user
```

Expand Down
2 changes: 1 addition & 1 deletion docs/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Implemented platform foundation

Qarinah 0.1.6 includes consent-gated MCP retrieval, one-command Codex/Claude/Cursor setup, a local memory dashboard, freshness checks, seven task packs, separate-authority multi-repository retrieval, optional reranking adapters, encrypted team bundles, role manifests, signed checkpoints, expanded quality evaluation, causal receipts across Cockroach, Qarinah, Maqam, execution, and observation, and a release-integrity gate that keeps package, runtime, type, MCP, website, paper, and benchmark metadata aligned.
Qarinah 0.1.7 includes consent-gated MCP retrieval, one-command Codex/Claude/Cursor setup, a local memory dashboard, freshness checks, seven task packs, separate-authority multi-repository retrieval, optional reranking adapters, encrypted team bundles, role manifests, signed checkpoints, expanded quality evaluation, causal receipts across Cockroach, Qarinah, Maqam, execution, and observation, and a release-integrity gate that keeps package, runtime, type, MCP, website, paper, and benchmark metadata aligned.

The encrypted sync surface is a public self-hostable protocol foundation. A managed cross-device service, identity-provider federation, durable hosted transport, and organization administration remain future service work.

Expand Down
4 changes: 2 additions & 2 deletions docs/TOKEN-EFFICIENT-CONTEXT.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,12 +158,12 @@ Qarinah stores memory in the opted-in project, not in one editor's private conve
Install the reviewed plugins once per host:

```sh
codex plugin marketplace add AjnasNB/qarinah --ref v0.1.6
codex plugin marketplace add AjnasNB/qarinah --ref v0.1.7
codex plugin add qarinah@qarinah
```

```sh
claude plugin marketplace add AjnasNB/qarinah@v0.1.6 --scope user
claude plugin marketplace add AjnasNB/qarinah@v0.1.7 --scope user
claude plugin install qarinah@qarinah --scope user
```

Expand Down
2 changes: 1 addition & 1 deletion integrations/claude/qarinah/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "qarinah",
"version": "0.1.6",
"version": "0.1.7",
"description": "Qarinah is evidence-linked project memory for coding agents - compact enough to save context, inspectable enough to trust.",
"author": {
"name": "Ajnas NB",
Expand Down
4 changes: 2 additions & 2 deletions integrations/claude/qarinah/runtime/qarinah.mjs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion integrations/codex/qarinah/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "qarinah",
"version": "0.1.6",
"version": "0.1.7",
"description": "Qarinah is evidence-linked project memory for coding agents - compact enough to save context, inspectable enough to trust.",
"author": {
"name": "Ajnas NB",
Expand Down
4 changes: 2 additions & 2 deletions integrations/codex/qarinah/runtime/qarinah.mjs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "qarinah",
"version": "0.1.6",
"version": "0.1.7",
"description": "Evidence-linked project memory for coding agents with verified handoffs and a reproducible 98.71% estimated repeated-context reduction.",
"license": "Apache-2.0",
"author": "Ajnas NB",
Expand Down
6 changes: 4 additions & 2 deletions scripts/evaluate-continuation-context.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ import {

const repositoryRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
const packageJson = JSON.parse(await readFile(path.join(repositoryRoot, "package.json"), "utf8"));
const resultPath = path.join(repositoryRoot, "bench", "results", `continuation-context-${packageJson.version}.json`);
const evidencePackageVersion = "0.1.6";
const resultPath = path.join(repositoryRoot, "bench", "results", `continuation-context-${evidencePackageVersion}.json`);
const writeResult = process.argv.includes("--write");
const root = await mkdtemp(path.join(os.tmpdir(), "qarinah-continuation-context-"));
process.env.QARINAH_STATE_DIR = path.join(root, ".machine-state");
Expand Down Expand Up @@ -205,7 +206,7 @@ try {

const artifact = {
schemaVersion: "qarinah.continuation-context-eval-result.v1",
packageVersion: packageJson.version,
packageVersion: evidencePackageVersion,
fixture: {
description: "Deterministic two-session fixture with an inferred handoff summary linked to extracted prompt, verified test outcome, and completed-turn evidence, followed by lifecycle events that deliberately stale persisted derived state.",
tokenEstimator: "portable ceil(characters / 4)",
Expand All @@ -229,6 +230,7 @@ try {
process.stdout.write(`${JSON.stringify({
schemaVersion: "qarinah.continuation-context-eval-run.v1",
packageVersion: packageJson.version,
evidencePackageVersion,
node: process.version,
platform: `${process.platform}-${process.arch}`,
...artifact
Expand Down
6 changes: 4 additions & 2 deletions scripts/evaluate-multifile-context.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ import {

const repositoryRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
const packageJson = JSON.parse(await readFile(path.join(repositoryRoot, "package.json"), "utf8"));
const resultPath = path.join(repositoryRoot, "bench", "results", `multifile-context-${packageJson.version}.json`);
const evidencePackageVersion = "0.1.6";
const resultPath = path.join(repositoryRoot, "bench", "results", `multifile-context-${evidencePackageVersion}.json`);
const writeResult = process.argv.includes("--write");
const fileCounts = Object.freeze([40, 50, 100]);
const asOf = "2099-02-01T00:00:00.000Z";
Expand Down Expand Up @@ -418,7 +419,7 @@ const totalPositiveQueries = scales.reduce((sum, scale) => sum + scale.exactQuer
const totalUnsupportedQueries = scales.reduce((sum, scale) => sum + scale.unsupportedQueries, 0);
const artifact = {
schemaVersion: "qarinah.multifile-context-eval-result.v1",
packageVersion: packageJson.version,
packageVersion: evidencePackageVersion,
fixture: {
description: "Deterministic 40/50/100-file project workspaces with nested JavaScript and Markdown files, resolved imports/links, one unique answer-bearing memory record per file, lexical distractors, graph-only evidence, supersession, contradiction, stale derived projections, and unsupported controls.",
fileCounts,
Expand Down Expand Up @@ -474,6 +475,7 @@ if (writeResult) {
process.stdout.write(`${JSON.stringify({
schemaVersion: "qarinah.multifile-context-eval-run.v1",
packageVersion: packageJson.version,
evidencePackageVersion,
node: process.version,
platform: `${process.platform}-${process.arch}`,
...artifact
Expand Down
8 changes: 4 additions & 4 deletions scripts/verify-benchmark-release-0.1.6.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ execFileSync("git", ["merge-base", "--is-ancestor", historicalPaperSourceCommit,
});

assert.equal(release.schemaVersion, "qarinah.benchmark-release.v2");
assert.equal(release.packageVersion, packageJson.version);
assert.equal(packageJson.version, "0.1.7");
assert.equal(release.packageVersion, "0.1.6");
assert.equal(release.paperVersion, "1.3");
assert.equal(release.status, "release-candidate-locally-verified-not-published");
Expand Down Expand Up @@ -132,7 +132,7 @@ assert.equal(software.expected.cases, 6);
assert.equal(software.expected.allTargetsInTopFive, true);
assert.equal(software.expected.allCoverageDirect, true);

assert.equal(continuation.packageVersion, packageJson.version);
assert.equal(continuation.packageVersion, release.packageVersion);
assert.equal(capsule.id, "two-session-model-facing-capsule");
assert.equal(capsule.baselineEstimatedTokens, continuation.expected.rawHistoryTokens);
assert.equal(capsule.qarinahEstimatedTokens, continuation.expected.capsuleTokens);
Expand All @@ -149,7 +149,7 @@ assert.equal(auditPack.displayReduction, "89.05%");
assert.equal(continuation.expected.sourceIdsPreserved, true);
assert.equal(continuation.expected.sourceHashesPreserved, true);

assert.equal(multifile.packageVersion, packageJson.version);
assert.equal(multifile.packageVersion, release.packageVersion);
assert.equal(release.multiFileProjectStudy.totalFiles, multifile.fixture.totalFiles);
assert.equal(release.multiFileProjectStudy.positiveQueriesPassed, multifile.fixture.totalPositiveQueries);
assert.equal(release.multiFileProjectStudy.unsupportedQueriesCorrectlyRejected, multifile.fixture.totalUnsupportedQueries);
Expand All @@ -170,7 +170,7 @@ assert.deepEqual(
const development = release.realRepositoryDevelopmentStudy;
const staticSetting = currentResearch.expected.settings.static;
const onlineSetting = currentResearch.expected.settings.onlinePrequential;
assert.equal(currentResearch.packageVersion, packageJson.version);
assert.equal(currentResearch.packageVersion, release.packageVersion);
assert.equal(currentResearch.implementation.evidenceSufficiencyMethod, "evidence-sufficiency-v2");
assert.equal(development.dataset.tasks, currentResearch.expected.corpus.tasks);
assert.equal(development.dataset.heldoutQueries, currentResearch.expected.corpus.heldoutTasks);
Expand Down
Loading