Skip to content

Commit 8468aac

Browse files
fix: resolve windows ci and add preview site
1 parent fff3de4 commit 8468aac

30 files changed

Lines changed: 2437 additions & 2 deletions

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,20 @@ Zharwing Memory is a local-first project context manager for AI-assisted coding
44

55
The product keeps project knowledge, AI session history, context bundles, diagrams, decisions, commands, gotchas, and optional review proposals organized per project. A human can open the desktop app to understand current work, inspect AI context, inspect the graph, search previous work, and enable review workflows only when wanted.
66

7+
> **Status: standalone personal developer preview.** The current product is
8+
> intended for a trusted developer using a local, single-user environment. It
9+
> is not presented as a production, multi-tenant, or hardened harness release.
10+
> See the [developer preview boundary](docs/DEVELOPER_PREVIEW.md) for the exact
11+
> profile, limitations, compatibility policy, and validation gates.
12+
13+
![Zharwing Memory project dashboard](docs/assets/zharwing-memory-dashboard.png)
14+
15+
The dependency-free [public documentation website](website/memory/README.md)
16+
is maintained in this repository and is designed for
17+
`https://zharwing.barbutsa.com/memory/`. It explains the downloadable local
18+
application; it is not a hosted version of Memory and cannot access a user's
19+
memory store.
20+
721
## Current Implementation Status
822

923
This repository is the generic, project-neutral Zharwing Memory application source.
@@ -149,6 +163,9 @@ docs/
149163
OPERATIONS.md Setup, runtime, backup, validation notes
150164
AI_TESTING.md Manual AI-provider and semantic graph smoke tests
151165
166+
website/
167+
memory/ Dependency-free public documentation website
168+
152169
templates/
153170
bootstrap/ Generic AGENTS.md and CLAUDE.md templates for linked repos
154171
mcp/ Generic Codex and Claude MCP config examples
@@ -474,6 +491,8 @@ The visual direction follows the Graphite + Copper theme from the product plan.
474491

475492
Start here:
476493

494+
- [Public Documentation Website Source](website/memory/README.md)
495+
- [Developer Preview Boundary](docs/DEVELOPER_PREVIEW.md)
477496
- [Documentation Index](docs/README.md)
478497
- [Architecture](docs/ARCHITECTURE.md)
479498
- [Data Model](docs/DATA_MODEL.md)

docs/DEVELOPER_PREVIEW.md

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# Developer Preview Boundary
2+
3+
Zharwing Memory is being prepared as a **standalone personal developer
4+
preview**. This preview is useful for developers who want a local, inspectable
5+
memory layer for AI-assisted coding, but it is not a production, multi-user, or
6+
hardened agent-control-plane release.
7+
8+
Preparing this preview does not publish the repository, create a release, or
9+
change any private memory store. Those are separate owner-approved actions.
10+
11+
## Frozen Preview Baseline
12+
13+
- Release branch and upstream: `main` on `origin`
14+
- Source baseline: `fff3de45e6d769774a0a85ca18d6a1c64a322bcd`
15+
- Runtime/filesystem owner: Windows-native
16+
- Node.js: `22.21.0` (the repository also declares the supported Node 24 range)
17+
- pnpm: `9.0.0`
18+
- Canonical execution-plan fingerprint:
19+
`sha256:f8ef7336ce593e4eba84511d547e460b2f9580a5fcce6ed3ce1b0afb7a11b74c`
20+
21+
The source candidate starts from a clean baseline. Generated output,
22+
dependencies, private stores, credentials, and machine-specific evidence are
23+
not release source.
24+
25+
## Product Profile Decision
26+
27+
The standalone personal preview and the future hardened harness integration
28+
are separate profiles.
29+
30+
The preview preserves the current personal workflow:
31+
32+
- **Authentication:** token authentication remains the default. Explicit
33+
no-auth mode is limited to a loopback-bound personal daemon.
34+
- **Visibility:** selected-project memory is AI-eligible by default. Explicit
35+
visibility exclusions, never-send patterns, secret detection, redaction, and
36+
high-risk blocking remain enforced.
37+
- **Durable writes:** routine agent writes are allowed when project review mode
38+
is off. Review mode and Memory Inbox proposals remain available when the user
39+
wants approval or when a change is risky or uncertain.
40+
- **Browser authority:** the browser and desktop UI are the human control
41+
plane. The browser uses the authenticated daemon and does not gain arbitrary
42+
local filesystem access. Destructive and administrative operations are not
43+
part of the eleven-tool MCP daily-memory surface.
44+
- **Compatibility:** the current CLI, daemon, browser/desktop UI, pointer-file
45+
format, Markdown store, and eleven MCP tools remain compatible for this
46+
preview. Existing stores are not silently migrated to a different policy.
47+
- **Migration and rollback:** the preview performs no profile-policy migration.
48+
A future hardened profile must be opt-in, versioned, preceded by a verified
49+
backup, and reversible to the standalone profile without rewriting canonical
50+
memory content.
51+
52+
The future hardened harness profile must add project-scoped least-privilege
53+
credentials, import-safe visibility, proposal-only durable knowledge changes,
54+
browser session credentials, and explicit migration and rollback behavior. It
55+
must not silently change the standalone preview's behavior.
56+
57+
## Product Screenshots
58+
59+
The screenshots below use a disposable demonstration store and repository.
60+
They contain no private project memory, credentials, or personal paths.
61+
62+
![Project dashboard](assets/zharwing-memory-dashboard.png)
63+
64+
![Active work session](assets/zharwing-memory-current-work.png)
65+
66+
## Preview Limitations
67+
68+
- Intended for a trusted developer operating a local, single-user environment.
69+
- Not qualified for multi-tenant, shared-host, or untrusted-network use.
70+
- Broad end-to-end coverage across every desktop workflow is still incomplete.
71+
- Optional live-provider compatibility requires opt-in testing with each
72+
provider; normal memory, search, graph, and context workflows do not require
73+
a model.
74+
- Installer generation and installer-level smoke testing remain outstanding.
75+
A packaged Windows executable has been built, but it is not being published
76+
as part of this source preview.
77+
- The hardened harness profile and its security/data-integrity qualification
78+
remain future work and are not implied by this preview.
79+
80+
## Local Preview Gates
81+
82+
Run the following commands from a clean Windows checkout of the exact candidate
83+
commit using Node.js `22.21.0` and pnpm `9.0.0`:
84+
85+
```powershell
86+
corepack pnpm install --frozen-lockfile
87+
corepack pnpm check:source-artifacts
88+
corepack pnpm typecheck
89+
corepack pnpm test
90+
corepack pnpm build
91+
corepack pnpm test:desktop-browser
92+
cargo test --locked --manifest-path apps/desktop/src-tauri/Cargo.toml
93+
```
94+
95+
The release evidence must record the candidate commit, branch, upstream, OS,
96+
Node and pnpm versions, command, exit code, timestamp, and any intentional skip.
97+
It must also include:
98+
99+
1. `git status --short --branch` before and after validation.
100+
2. A clean-clone or fresh-checkout result using only tracked source and the
101+
frozen lockfile.
102+
3. A screenshot made only from disposable demonstration data.
103+
4. An independently reviewed diff with no secrets, private memory, generated
104+
source artifacts, or machine-specific paths.
105+
106+
Installer generation and installer-level smoke testing are explicitly outside
107+
this developer-preview source release and must not be reported as passed.
108+
109+
Remote CI and repository visibility changes happen only after a separate
110+
owner approval. If preview validation fails, keep the repository private,
111+
retain the current installation, and revert only the preview-specific source
112+
and documentation changes.
58.3 KB
Loading
75.2 KB
Loading

packages/mcp-tools/src/install.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ test("stdio install from the development CLI resolves the compiled entry", async
8080
nodePath: "node"
8181
});
8282

83-
assert.deepEqual(result.args, [compiledEntry, "mcp", "serve"]);
83+
const resolvedCompiledEntry = await fs.realpath(compiledEntry);
84+
assert.deepEqual(result.args, [resolvedCompiledEntry, "mcp", "serve"]);
8485
});
8586

8687
test("canonical install removes the legacy Codex MCP table", async () => {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import assert from "node:assert/strict";
2+
import test from "node:test";
3+
import { formatMarkdown, parseMarkdown } from "./markdown.js";
4+
5+
test("quoted Windows paths remain stable across repeated Markdown round trips", () => {
6+
const workingDirectory = String.raw`C:\Users\RUNNER~1\AppData\Local\Temp\zharwing-memory`;
7+
const original = formatMarkdown({ working_directory: workingDirectory }, "# Session\n");
8+
let markdown = original;
9+
10+
for (let iteration = 0; iteration < 1_000; iteration += 1) {
11+
const parsed = parseMarkdown(markdown);
12+
assert.equal(parsed.frontmatter.working_directory, workingDirectory);
13+
markdown = formatMarkdown(parsed.frontmatter, parsed.body);
14+
}
15+
16+
assert.equal(markdown, original);
17+
});

packages/storage/src/markdown.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,18 @@ function quote(input: string): string {
7979
}
8080

8181
function unquote(input: string): string {
82-
if ((input.startsWith('"') && input.endsWith('"')) || (input.startsWith("'") && input.endsWith("'"))) {
82+
if (input.startsWith('"') && input.endsWith('"')) {
83+
try {
84+
const parsed = JSON.parse(input);
85+
if (typeof parsed === "string") {
86+
return parsed;
87+
}
88+
} catch {
89+
// Preserve compatibility with previously stored, non-JSON quoted values.
90+
}
91+
return input.slice(1, -1);
92+
}
93+
if (input.startsWith("'") && input.endsWith("'")) {
8394
return input.slice(1, -1);
8495
}
8596
return input;

website/memory-page-preview.png

84.6 KB
Loading

website/memory/BRAND.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Zharwing Memory brand assets
2+
3+
The documentation website uses a plain **Zharwing Memory** text wordmark. It
4+
does not currently claim a permanent pictorial logo.
5+
6+
The compact browser and application icon is a deliberately simple context
7+
graph: one active memory node connected to four stored-context nodes. It is a
8+
functional project identifier for the developer preview, not a finished master
9+
brand.
10+
11+
## Files
12+
13+
- `assets/brand/zharwing-memory-mark.svg` — dark square context-graph icon.
14+
- `assets/brand/zharwing-memory-mark-transparent.svg` — transparent graph for
15+
light backgrounds.
16+
- `assets/brand/zharwing-memory-mark-monochrome.svg` — one-color accessible
17+
variant.
18+
- `assets/brand/favicon.svg` — simplified small-size browser icon.
19+
- `assets/brand/favicon-16.png` and `favicon-32.png` — legacy browser sizes.
20+
- `assets/brand/favicon.ico` — multi-size legacy favicon.
21+
- `assets/brand/apple-touch-icon.png` — 180×180 Apple touch icon.
22+
- `assets/brand/icon-192.png` and `icon-512.png` — manifest/application icons.
23+
24+
## Usage
25+
26+
- Use the text-only Zharwing Memory wordmark in website headers and footers.
27+
- Use the graph icon only where a compact square identifier is required, such
28+
as browser tabs, launchers, and repository avatars.
29+
- Use the transparent version on light, visually quiet backgrounds.
30+
- Use the monochrome version when the warm accent is unavailable.
31+
32+
## Avoid
33+
34+
- Do not place the graph beside the text wordmark as though it were a finalized
35+
permanent logo.
36+
- Do not add letters, feathers, circuits, gradients, shadows, or glow.
37+
- Do not rotate, stretch, or add more nodes.
38+
- Do not introduce additional foreground colors.
39+
40+
The SVG sources are canonical. Raster files are derived outputs and should be
41+
regenerated whenever the canonical icon changes.

website/memory/DEPLOYMENT.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# Deployment checklist for `/memory`
2+
3+
This package is prepared for integration into the existing Zharwing website at:
4+
5+
```text
6+
https://zharwing.barbutsa.com/memory/
7+
```
8+
9+
No deployment, DNS change, or external resource creation has been performed.
10+
11+
## Preferred integration
12+
13+
Copy the complete `memory/` directory into the existing site's public route for
14+
`/memory`. Preserve the relative relationship between `index.html`,
15+
`styles.css`, `script.js`, and `assets/`.
16+
17+
The page intentionally uses relative asset URLs, so it can be hosted beneath a
18+
path without a build-time base-path setting.
19+
20+
## Required routing behavior
21+
22+
The host must serve:
23+
24+
```text
25+
/memory/ -> /memory/index.html
26+
/memory/styles.css -> styles.css
27+
/memory/script.js -> script.js
28+
/memory/assets/* -> assets/*
29+
```
30+
31+
Direct requests to `/memory` should redirect to `/memory/` or serve the same
32+
HTML. The trailing slash ensures relative asset URLs resolve consistently.
33+
34+
## Before publishing
35+
36+
1. Confirm `https://github.com/zharwing/memory` is public and is the desired
37+
canonical source link.
38+
2. Confirm the current README installation commands still match the quick start.
39+
3. Confirm current limitations are truthful for the release being described.
40+
4. Open every GitHub and in-page navigation link.
41+
5. Test desktop at 1440×900 and mobile at 390×844.
42+
6. Verify the page with JavaScript disabled; all essential content must remain.
43+
7. Confirm no local paths, environment values, real project names, or private
44+
memory content appear in the output.
45+
8. Validate that `/memory` and `/memory/` both work on the final host.
46+
47+
## Search and social metadata
48+
49+
`index.html` already contains:
50+
51+
- canonical URL for `https://zharwing.barbutsa.com/memory/`;
52+
- title and description metadata;
53+
- Open Graph and Twitter card fields;
54+
- `SoftwareApplication` structured data;
55+
- a local SVG favicon.
56+
- a web manifest plus 16, 32, 180, 192, and 512 pixel feather/circuit icons.
57+
58+
The current Open Graph image points to the public dashboard screenshot. A custom
59+
1200×630 social image can replace it later, but it is not required for the first
60+
publication.
61+
62+
## Deliberately excluded
63+
64+
- analytics and tracking;
65+
- cookies, accounts, or sign-in;
66+
- a hosted Memory daemon or API;
67+
- downloads that do not yet have a supported release artifact;
68+
- duplicated copies of the repository's complete technical documentation;
69+
- any dependency or framework requirement.
70+
71+
## Rollback
72+
73+
Because this is a static route, rollback is simply removing the `/memory`
74+
route or restoring the previous static directory from the site's normal source
75+
control/deployment history.

0 commit comments

Comments
 (0)