Skip to content
Merged
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
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file. The format

## [Unreleased]

## [0.5.3] - 2026-07-30

### Changed

- [#204](https://github.com/mohanagy/miftah/issues/204) Kept guided Console setup reachable after configurations already exist through a visible **Set up another MCP** action. Returning users can create a separate named configuration through the reviewed local STDIO secret/API-key, native OAuth, returning provider-owned account, provider-adapter OAuth, or manual upstream-auth paths; successful publication refreshes discovery immediately. Existing files are never overwritten, unsafe catalog candidates remain unavailable with bounded diagnostics, audit fields remain redacted, and private-directory, inode-anchored POSIX publication, bounded no-shell subprocess, and Windows containment contracts remain fail closed.
- [#309](https://github.com/mohanagy/miftah/issues/309) Prepared the compatible v0.5.3 patch release for returning-user Console setup. Miftah remains experimental and pre-1.0. Closing #204 was an owner waiver of its three-evaluator acceptance criterion, not evidence that those evaluations occurred; external validation remains incomplete under #25, #88, #202, and #290.

## [0.5.2] - 2026-07-29

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Install Miftah, then choose the terminal wizard or the browser Console. Both use
### 1. Install the current release

```bash
npm install -g @lubab/miftah@0.5.2
npm install -g @lubab/miftah@0.5.3
miftah version
```

Expand Down
2 changes: 1 addition & 1 deletion docs/presets-and-clients.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
This is the compatibility source of truth for generated `miftah init` configurations and client snippets.

- Catalog version: `3`
- Miftah package version: `0.5.2`
- Miftah package version: `0.5.3`
- Last tested / validation boundary: the catalog builds strict Miftah configuration that `validateConfig` accepts. The docs contract test checks generated configuration only; it does **not** construct a runtime, start, authenticate to, or smoke-test external providers.

Miftah itself requires Node.js `>=20`. That does not establish an upstream server's Node requirement.
Expand Down
4 changes: 2 additions & 2 deletions docs/whats-new-in-0.5.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# What is in Miftah 0.5

Install `@lubab/miftah@0.5.2` when you want Miftah to guide setup instead of assembling a multi-account configuration by hand:
Install `@lubab/miftah@0.5.3` when you want Miftah to guide setup instead of assembling a multi-account configuration by hand:

```bash
npm install -g @lubab/miftah@0.5.2
npm install -g @lubab/miftah@0.5.3
miftah version
```

Expand Down
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": "@lubab/miftah",
"version": "0.5.2",
"version": "0.5.3",
"description": "Wrap any MCP. Use the right account without reconnecting.",
"keywords": [
"mcp",
Expand Down
35 changes: 20 additions & 15 deletions tests/release-version.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { readFileSync } from "node:fs";
import { describe, expect, it } from "vitest";

const releaseVersion = "0.5.2";
const releaseVersion = "0.5.3";

function readRepositoryFile(path: string): string {
return readFileSync(new URL(`../${path}`, import.meta.url), "utf8");
Expand All @@ -21,11 +21,17 @@ function releaseNotes(changelog: string, version: string): string {
return changelog.slice(match.index, end < 0 ? undefined : end);
}

describe("v0.5.2 release artifacts", () => {
describe("v0.5.3 release artifacts", () => {
it.each([
"## [0.5.2] - 2026-7-29\n\n### Fixed\n",
"Release candidate: ## [0.5.2] - 2026-07-29\n\n### Fixed\n"
])("requires a dated release heading at the start of a line", (changelog) => {
{
name: "a non-zero-padded date",
changelog: "## [0.5.3] - 2026-7-30\n\n### Changed\n"
},
{
name: "a heading that does not start its line",
changelog: "Release candidate: ## [0.5.3] - 2026-07-30\n\n### Changed\n"
}
])("rejects $name", ({ changelog }) => {
expect(() => releaseNotes(changelog, releaseVersion)).toThrow(
`Unable to find the ${releaseVersion} changelog entry.`
);
Expand Down Expand Up @@ -65,21 +71,20 @@ describe("v0.5.2 release artifacts", () => {
}
});

it("documents the evaluator-driven recovery fixes while retaining the experimental package status", () => {
it("documents returning-user setup while retaining the experimental package status", () => {
const changelog = readRepositoryFile("CHANGELOG.md");
const notes = releaseNotes(changelog, releaseVersion);

expect(notes).toContain("Miftah remains experimental and pre-1.0");
expect(notes).toContain("### Fixed");
const fixedStart = notes.indexOf("### Fixed");
const fixedEnd = notes.indexOf("\n### ", fixedStart + "### Fixed".length);
const fixedNotes = notes.slice(fixedStart, fixedEnd < 0 ? undefined : fixedEnd);
for (const issue of [203, 300, 301, 305]) {
expect(fixedNotes).toContain(`[#${issue}](https://github.com/mohanagy/miftah/issues/${issue})`);
expect(notes).toContain("### Changed");
const changedStart = notes.indexOf("### Changed");
const changedEnd = notes.indexOf("\n### ", changedStart + "### Changed".length);
const changedNotes = notes.slice(changedStart, changedEnd < 0 ? undefined : changedEnd);
for (const issue of [204, 309]) {
expect(changedNotes).toContain(`[#${issue}](https://github.com/mohanagy/miftah/issues/${issue})`);
}
expect(notes).toMatch(/found, ready, and need-attention/iu);
expect(notes).toMatch(/still-valid Console sessions across refresh/iu);
expect(notes).toMatch(/names-only environment-secret readiness/iu);
expect(notes).toMatch(/Set up another MCP/iu);
expect(notes).toMatch(/owner waiver/iu);
expect(notes).toMatch(/external validation remains incomplete/iu);

const readme = readRepositoryFile("README.md");
Expand Down