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.6] - 2026-07-31

### Fixed

- [#325](https://github.com/mohanagy/miftah/issues/325) Made Console setup completion and account switching remain actionable through overlapping refreshes and reauthentication. Successful setup now keeps its client handoff and focus without overriding the unlock screen; stale session responses cannot replace a newer configuration, status, or generated client entry; and Save draft, Resume draft, and readiness actions recover after successful reauthentication. Existing authentication, redaction, audit, no-shell subprocess, file-containment, Windows, and public API boundaries are unchanged.
- [#327](https://github.com/mohanagy/miftah/issues/327) Prepared the compatible v0.5.6 patch release for the Console actionability correction. Miftah remains experimental and pre-1.0. Technical delivery and owner dogfooding do not satisfy external evaluator counts; external validation remains incomplete under #25, #88, #202, and #290.

## [0.5.5] - 2026-07-31

### Changed
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.5
npm install -g @lubab/miftah@0.5.6
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.5`
- Miftah package version: `0.5.6`
- 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.5` when you want Miftah to guide setup instead of assembling a multi-account configuration by hand:
Install `@lubab/miftah@0.5.6` when you want Miftah to guide setup instead of assembling a multi-account configuration by hand:

```bash
npm install -g @lubab/miftah@0.5.5
npm install -g @lubab/miftah@0.5.6
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.5",
"version": "0.5.6",
"description": "Wrap any MCP. Use the right account without reconnecting.",
"keywords": [
"mcp",
Expand Down
32 changes: 15 additions & 17 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.5";
const releaseVersion = "0.5.6";

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

describe("v0.5.5 release artifacts", () => {
describe("v0.5.6 release artifacts", () => {
it.each([
{
name: "a non-zero-padded date",
changelog: "## [0.5.5] - 2026-7-31\n\n### Changed\n"
changelog: "## [0.5.6] - 2026-7-31\n\n### Fixed\n"
},
{
name: "a heading that does not start its line",
changelog: "Release candidate: ## [0.5.5] - 2026-07-31\n\n### Changed\n"
changelog: "Release candidate: ## [0.5.6] - 2026-07-31\n\n### Fixed\n"
}
])("rejects $name", ({ changelog }) => {
expect(() => releaseNotes(changelog, releaseVersion)).toThrow(
Expand Down Expand Up @@ -71,24 +71,22 @@ describe("v0.5.5 release artifacts", () => {
}
});

it("documents the task-first Console while retaining the experimental package status", () => {
it("documents the actionable Console patch 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("### 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 [202, 319]) {
expect(changedNotes).toContain(`[#${issue}](https://github.com/mohanagy/miftah/issues/${issue})`);
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 [325, 327]) {
expect(fixedNotes).toContain(`[#${issue}](https://github.com/mohanagy/miftah/issues/${issue})`);
}
expect(notes).toMatch(/task-first/iu);
expect(notes).toMatch(
/named account profiles, durable default, and whether live in-session switching through `miftah_use_profile` is available/iu
);
expect(notes).toContain("collapsed behind **How authentication works**");
expect(notes).toContain("external validation remains incomplete under #25, #88, and #202");
expect(notes).toMatch(/setup completion/iu);
expect(notes).toMatch(/stale.*session.*responses/iu);
expect(notes).toMatch(/reauthentication/iu);
expect(notes).toContain("external validation remains incomplete under #25, #88, #202, and #290");

const readme = readRepositoryFile("README.md");
const featureGuide = readRepositoryFile("docs/whats-new-in-0.5.md");
Expand Down