Validation record
Local development builds. Results are dated per section; older artifact hashes apply only to the builds recorded with them. Command examples use the current project spelling; historical artifact hashes do not describe the newly named binaries. These results describe checks actually run; CI configuration is not evidence of a successful remote CI run or an independent security audit.
SaaS accounts and configurable registration (2026-10-14)
Release 20261014-83aca4d86199 is deployed on ldny. Linux binary SHA-256:
83aca4d86199718587da2fe812471bffb6ea7aefd499c52ed53e6566a7dd4c73.
Account UI deployment: 908a7085.memories-ap4.pages.dev.
cargo fmt --all --check,cargo clippy --workspace --all-targets --locked -- -D warnings, andcargo test --workspace --lockedpassed on Windows. Existing optional environment-dependent tests retain their declared ignored status.cargo build --workspace --release --lockedpassed on Windows. The Linuxmemories-centerrelease build passed with the locked dependency graph and was tested in the production-compatible Ubuntu container described below.- Center tests: 79 passed, including seven account/configuration tests covering username registration, canonical identities, email verification/expiry/reuse, SMTP transport failure, actual delivery to a loopback SMTP fixture, password hashing, bounded auth work/requests, cross-account read/write denial, admin changes/deletion, logout, restart persistence and fail-closed member writes.
- Web client and API proxy Node tests: 13 passed. Documentation generation verified local links and anchors in 32 HTML pages.
- Real Chromium registered/logged in against an isolated Center and created a memory. Email form transitions were checked with mocked API responses; those browser checks did not send mail. Backend email delivery was separately checked through the local SMTP fixture, not an external provider.
- The exact production image passed an isolated ldny container canary with two accounts, distinct vaults, cross-account denial, logout, restart persistence, and login while registration was closed. The canary container and its synthetic data were removed. Production data was not used for that test.
- Production restart preserved the existing owner's vault identity and member
token through the public domain. The existing PostgreSQL container and
cloudflared service remained running. Embedded
/app/assets and public Pages assets match. Public desktop/mobile pages have no browser console errors and no horizontal overflow at 390px. - Production selects email mode in
/etc/memories-center/auth.toml. SMTP was configured on 2026-10-14 using Tencent enterprise mail with certificate-verified implicit TLS on port 465. Provider authentication passed, the service restarted successfully, and the public configuration reports registration enabled. A public registration request returned 200 withverification_required: trueafter submitting a verification email to the provider. Inbox receipt and the user's final code/password submission remain unverified. Passwords are kept only in protected configuration outside the repository. - Protected consistent backup:
/var/backups/memories-center/20261014-before-accounts-83aca4d86199/state-and-config.tar.gz. Evidence, source patch and build receipt:dist/saas-accounts-20261014/. The patch applies to the recorded clean base; Git normalizes text line endings.
Hosted SaaS on ldny (2026-10-14, initial deployment)
memories.ivjn.us now serves the hosted Center API through a Cloudflare Worker
and the existing ldny Tunnel. The static website, Web client and independent
documentation remain on Pages. ldny runs the Linux release in an Ubuntu 24.04
Podman container, with persistent encrypted data outside the image and systemd
startup/restart management.
- Public
/healthreturnsok;/v1/public-keyidentifiesmemories-saas. Anonymous/v1/sessionreturns 401, and a scoped member/grant returns the authorized session. API responses useCache-Control: no-store. - Synthetic content survived a service restart. Real Chromium created, edited
and reopened a memory through
https://memories.ivjn.us, then deleted it. The final container release passed two consecutive systemd restarts with a fresh persisted test item. A 1 MiB binary file uploaded/downloaded through the public API matched SHA-256; read-only grants rejected writes with 403. - Desktop and 390px mobile browser checks had no horizontal overflow or console errors. Tokens/content were absent from browser storage. QA content was cleared and temporary grants revoked. An existing owner token still worked after the final upgrade; a protected pre-upgrade state/configuration backup was retained.
- All 10 Node tests for the Web API and edge proxy passed. Linux release build and local Linux authentication/persistence/embedded-asset smoke checks passed.
See the repository's deploy/README.md for service layout and rollback.
Secrets were generated on the server and kept out of the repository. These
checks do not establish independent security certification or public self-service
account registration. Local evidence is in dist/saas-ldny-20261014/.
Memories Web (2026-10-14, initial frontend deployment)
Added the static Center client at /app/ and bundled the same assets into
memories-center. This is a hosted Center client, not an offline browser vault.
This initial frontend deployment preceded the SaaS rollout recorded above.
- The full Rust sequence passed: format check, workspace/all-target Clippy with warnings denied, locked workspace tests, and locked workspace release build. The Center suite includes explicit-origin validation and CORS scope/auth tests.
node --test scripts/tests/web-client.test.mjs: 6 passed, covering token origin binding, redirect/cookie/cache restrictions, partial updates, cancellation and stale responses, failed connection races, generic errors and binary encoding.- Real Chromium connected the static site on port 8097 to a disposable hosted Center on port 9297. Memory create/edit/reopen, card create/delete, file upload and download passed. A 10,240-byte binary download matched the source SHA-256. Reader grants disabled mutations; a write-only grant created a memory that was independently read using the owner grant, with the deleted card absent.
- Desktop and 390px mobile workspace layouts were inspected. Explicit disconnect cleared visible content and the token field; the five-minute idle lock was also observed. Neither localStorage nor sessionStorage contained tokens or content.
- The release Center served all seven bundled assets byte-for-byte matching the
website sources. Its
/app/page loaded with no browser console errors or warnings, and the CSP/security headers were checked.
Only synthetic vault data and disposable grants were used. These checks do not
claim a connection to a production vault, an independent security audit, or native
client feature parity. Evidence is retained locally under
dist/site-update-7647166/output/playwright/ and dist/web-client-qa/.
Website client refresh (2026-10-14)
Website follow-up: download cards now share grid rows for hashes, primary
buttons and metadata links. Standalone documentation at /docs/ contains 29
generated pages with navigation, heading links and a mobile collapsible menu.
python scripts/build-website-docs.py verifies local links and fragment targets
across all 30 HTML pages. node --check passed for both website scripts.
Browser checks covered the home page, documentation hub, English and Chinese
guides and configuration at 390px, 900px and 1440px, without horizontal page
overflow or console errors. Download buttons, hashes and BUILD-INFO links have
matching vertical positions across the four desktop cards.
Source base: 7647166a6d97e59e9a466fec5ead287892b428af (main, synchronized
with origin/main). Windows and Linux packages use this committed source.
Android also includes the local R8 constructor-retention fix described below;
its BUILD-INFO.json records source_dirty: true and the published source patch.
| Published artifact | Bytes | SHA-256 |
|---|---|---|
| Windows x86_64 v0.1.7 ZIP | 51646344 | 755663b54323bfcf4ba9bef474c10599542372416ac6b50dcc4bd0d3f75fdcad |
| Linux x86_64 v0.1.7 tar.gz | 44817901 | 2a58ab5702e82baa4dc7fcc30a42b4ca01811d3a9312facf5429d444b0f64b7d |
| Android v0.1.7, versionCode 8 APK | 146722216 | 74256790a248ea17b0f9ad60aa74be311da7ef77b243023fa8d4490b76a1d24d |
The public bases are https://r2.ivjn.us/memories/7647166/windows/,
https://r2.ivjn.us/memories/7647166/linux/, and
https://r2.ivjn.us/memories/7647166/android-cc5ac4b5/. All three packages and
their published metadata were downloaded again and matched local SHA-256 hashes.
The Android SOURCE.patch SHA-256 is
cc5ac4b57ced3bc87738d51da5ded84822627b5f05f8db024d323bde98dda4c2;
git apply --check passed against the clean base checkout.
Validation performed:
- Rust 1.98.0 on Windows:
cargo fmt --all --check,cargo clippy --workspace --all-targets --locked -- -D warnings,cargo test --workspace --locked, andcargo build --workspace --release --lockedall passed. Configured ignored tests remain ignored; dependency future-compatibility warnings remain. - Windows package: 47 manifest files and archive entries verified; extracted
CLI
--versionreturnedmemories 0.1.7, and relay--helppassed. - Linux package: built with
bash scripts/package-linux.shin a clean WSL GNU checkout (glibc 2.39, OpenSSL 3). All 45 manifest files, archive entries and executable permissions verified. Extracted CLI--versionandfile exec --helppassed;lddresolved all dependencies. - Flutter 3.44.2 / Dart 3.12.2:
flutter pub get,dart format --output=none --set-exit-if-changed lib test integration_test,flutter analyze, andflutter testpassed (126 tests). - Rebuilt ARM64/x86_64 Rust FFI libraries and ran
flutter test integration_test/native_smoke_test.dart -d emulator-5680successfully on Android API 35 x86_64. Updated the obsolete eight-character ID assertion to match the core's even-length 6-16 hex character contract. Rebuilt the ordinary debug APK afterward and verified its native libraries. - Built the release APK with
flutter build apk --release --target-platform android-arm64,android-x64 --build-number 8, aligned it, and signed it using the external configuration documented inAGENTS.md.apksigner verifypassed with the existing release certificate SHA-256d637a37d5dd77aa5753722eccf53ab1b84baed2189e603cef9c34dbf354948f8. Source, merged, stripped and packaged FFI libraries were checked for both ABIs. - Actual signed-release testing found an R8 startup crash: Room reflectively
constructs
androidx.work.impl.WorkDatabase_Impl, but its public no-argument constructor was removed. Added a narrowly scoped keep rule, rebuilt, and verified two cold launches and entry into Standalone mode without an AndroidRuntime fatal exception. The failed candidate was withdrawn before website deployment; its public APK URL returned HTTP 404. - Website JavaScript syntax and local HTML resources, IDs and fragment targets passed checks. Local browser checks at 1440px and 390px passed bilingual switching without horizontal overflow or console errors.
Cloudflare Pages production deployment completed at
https://09253fe4.memories-ap4.pages.dev for project memories, branch main,
with dirty-source metadata. https://memories.ivjn.us/ returned HTTP 200 and
matched the local website/index.html byte for byte. All 12 download/metadata
links returned HTTP 200, including the retained macOS links. CSP, nosniff,
frame denial, referrer and permissions-policy headers were present. Production
browser checks passed at 1440px and 390px with English/Chinese switching,
no horizontal overflow and zero console errors or warnings. Screenshots are
under dist/site-update-7647166/output/playwright/live-*.png.
Local evidence and helpers are under dist/site-update-7647166/; the Windows
package is under dist/v0.1.7/. Signing secrets stayed outside the checkout.
macOS remains on the existing v0.1.3 download: the macOS host was offline and
GitHub Actions was blocked by the account billing/spending limit. No new macOS
or iOS build, physical ARM64 execution, store publication or independent security
audit is claimed. Linux validation above supersedes the older baseline's Linux
limitation for this package.
Unattended native CI wiring (2026-10-01; scheduled, not executed)
The Rust OS matrix in .github/workflows/ci.yml now schedules explicit native
checks after ordinary workspace tests:
- Windows:
cargo test -p memories --lib native_dpapi --lockedruns the existing current-user DPAPI roundtrip and changed-binding denial tests. They use only synthetic in-memory buffers, freed and zeroized by the native buffer guard; the placeholder custody path is never accessed. - macOS:
cargo test -p memories --lib unattended_backend::macos::tests::native_roundtrip_when_keychain_is_unlocked --locked -- --exact --ignoredruns only the ignored native Keychain roundtrip, not other ignored tests. It creates a synthetic, nonsynchronizing entry with a unique temporary-directory binding, then deletes that exact entry before checking the read result or asserting equality. Provision, read and cleanup errors fail the test; a failed create never triggers deletion of a pre-existing entry.
The macOS runner must provide an available, unlocked user keychain permitting no-UI create/read/delete. No keychain unlock, authentication UI, ACL weakening, global keychain changes or password injection is added. Missing or locked keychains fail rather than silently skipping or falling back. If native deletion fails, the test fails and its synthetic entry may remain on the disposable runner. Earlier formatting/lint/test failures can prevent these steps from being reached.
These steps are configured for future push/pull-request CI runs, not executed native evidence. No workflow was dispatched and neither Windows nor macOS native tests were run locally: this implementation environment is Linux with no configured native hosts. Actual native execution and locked/approval-needed no-UI validation remain release gates; CI wiring alone does not complete them.
Linux build and packaging scripts (2026-09-18)
Validated the new Linux shell scripts in Ubuntu on WSL2 from a Windows checkout.
bash -n passed for both scripts. Disposable committed fixture repositories and
mock build tools exercised release/debug selection, explicit native target
selection despite a conflicting CARGO_BUILD_TARGET, paths with spaces, custom
Cargo target directories, x86_64/aarch64 archive layout, executable permissions,
tracked docs/licenses, source commit metadata and all file/archive checksums.
Wrong OS, unsupported targets, invalid arguments, missing OpenSSL, failed builds,
dirty checkouts and existing package directories were rejected as expected;
existing archives remained unchanged.
The WSL environment has no Rust/C build toolchain, so this validates script behavior with fixture artifacts, not Linux compilation or native runtime. The updated manual desktop workflow includes Linux dependency installation, ShellCheck, Rust checks, packaging, checksum verification and extracted CLI/relay smoke commands; that remote workflow has not been run for this change. Native ARM64 and distribution/glibc/OpenSSL compatibility remain unverified.
Windows v0.1.3 retrieval, embedded models and six-character IDs (2026-09-18)
The v0.1.3 tag and release BUILD-INFO.json identify the source and packaged
files. The inference engine is part of the application; model weights are
installed separately as verified data files, not run by another application.
- Workspace regression: 158 passed, zero failures, 17 intentionally ignored helper/tool/model-dependent cases. The final six-test retrieval suite also passed separately, including a new in-flight public-to-private document change regression added after the workspace run started.
- Native EmbeddingGemma ran in-process with actual pinned Q4 model files. A Chinese question ranked the relevant English dog document above unrelated finance text, with 768-dimensional finite, normalized vectors. A second real CLI/daemon test built the vector index, retrieved the semantic match and confirmed lock rejection/cache clearing. Both opt-in tests passed after explicitly disabling ONNX telemetry before session creation.
- The final optimized Windows release CLI was also exercised directly through
real daemon IPC: six-character IDs, two indexed documents, the cross-language
semantic match and lock denial passed. Its report is
target/rag-release-smoke.json; no external embedding application was used. - Model installation through the actual release CLI passed against a disposable loopback mirror: an injected HTTP 429 and interrupted model response recovered through retries/ranges (59 requests, 53 ranges), and all seven model files matched their SHA-256 pins. Repeating installation with the mirror stopped reused verified files offline. No encrypted store was initialized by install.
- HTTP fixtures verify Gemini/compatible payloads, requested dimensions, embedding order/count/dimension checks, learned reranking, citation rejection, transient retries, non-retried authentication errors, cancellation and actual HTTPS proxy CONNECT. Failed bodies and direct API-key echoes are suppressed.
- Search/RAG regressions cover Chinese terms, any/all/phrase modes, Unicode chunk offsets, vector-cache reuse/invalidation, hidden credentials/private/deleted content, lock and grant revocation, cross-vault denial, device-only remote disclosure rejection, and changed documents during model work. CLI and MCP ingestion/retrieval work without a model for BM25 mode.
- Six-character IDs, six/eight-character collision extension, old eight-character input compatibility and typed reference projections pass alongside the existing authorization/storage/FFI regressions. Canonical stored IDs and security fingerprints are unchanged.
- Formatting, workspace/all-target Clippy with
-D warnings, optimized builds and a core build without the optional native embedding feature pass. Existing dependency future-compatibility and native linker informational warnings remain. - Live customer Gemini/generation/rerank services were not called; protocol validation uses synthetic HTTP fixtures. macOS/Linux runtime and mobile native builds were not exercised here. The mobile FFI exposes lexical retrieval but rejects model-backed operations. No Flutter UI was changed.
Model revision: 5090578d9565bb06545b4552f76e6bc2c93e4a66 from
onnx-community/embeddinggemma-300m-ONNX. Logs are target/rag-*.log and the
download/mirror records under target/. Only synthetic stores, documents and
credentials were used.
Windows v0.1.2 desktop status and configuration (2026-09-18)
The v0.1.2 tag identifies this source. Release BUILD-INFO.json binds the exact
commit and every packaged file; SHA256SUMS also covers the standalone example
configuration. The Windows archive includes the tray executable, embedded WebUI,
all tracked documentation, the TOML example and bundled-font licenses.
cargo test --workspace --locked -- --test-threads=2: 144 passed, zero failures, 14 intentionally ignored subprocess helpers/external-tool cases. A strengthened configuration-forwarding/live-WebUI regression also passed separately against the final source (two desktop integration tests).- Formatting, workspace/all-target Clippy with
-D warnings, and optimized workspace builds passed on Rust 1.98.1 MSVC. Existing dependency future-compatibility and FFI linker informational warnings remain. - Regressions cover capability/Host/Origin/fetch-site rejection, no mutation or generic IPC routes, token rotation, shutdown with partial HTTP connections, passive idle expiry, hidden locked details and MCP denial. Real daemon/WebUI integration covers setup, unlocked counts, lock and disconnect.
- Configuration tests cover CLI/environment/file precedence, relative storage, no-store inspection, explicit config forwarding to probes, saved language in the selected home, relay defaults, malformed values, redacted errors and preservation of existing configuration files.
- Actual Windows release CLI/tray processes started with a disposable TOML file and synthetic store. The browser verified locked/unlocked states and three synthetic libraries, all five languages, and desktop/390-pixel layouts with no horizontal overflow or browser errors. The tray process stayed responsive without startup errors. Native menu clicks were not verified because the automation surface did not expose a taskbar/tray window.
cargo package --listincludes the embedded assets/fonts, configuration template and launcher sources. macOS shell/embedded-Python packaging syntax checks passed. macOS compilation, menu-bar runtime, signing/notarization and Linux runtime checks were not available on this Windows host.- No mobile assets or Flutter code changed; Flutter/native-device runs and the opt-in external cryptographic-tool cases were not repeated for this release.
Logs are target/desktop-config-*.log and target/config-tests.log. The manual
Build desktop packages workflow provides Windows/macOS package jobs; a workflow
definition does not establish a successful macOS build.
Windows v0.1.1 documentation and password ID aliases (2026-09-18)
The v0.1.1 tag identifies the source. This Windows-only prerelease includes
every tracked docs/ file with its directory structure intact; its
BUILD-INFO.json records the source commit and SHA-256 of each packaged file,
and SHA256SUMS covers the archive and build manifest.
cargo test -p memories --locked --test crypto_jobs --test localization: seven passed, zero failures; three external-tool tests intentionally ignored. Regression coverage confirms--password_id,--passwordand--password-idproduce identical plans/approval digests; a changed credential ID changes the approval. Five-language help advertises the aliases.cargo fmt --all --check, workspace/all-target Clippy with-D warnings, andcargo build --workspace --release --lockedpassed on Rust 1.98.1 MSVC. Existing dependency future-compatibility and FFI linker notices remain.- Release CLI/relay version and crypto help smoke checks passed.
- The full workspace, external-tool and Flutter results below apply to v0.1.0; those broader suites were not repeated for this CLI alias/documentation update. No mobile artifact was rebuilt; the Flutter application version is unchanged.
- The repeatable packaging command is
pwsh -File scripts/package-windows.ps1. Logs for this run are undertarget/release-0.1.1-*.log.
Windows v0.1.0 prerelease (2026-09-18)
Built locally on Windows x86_64 with Rust 1.98.1 MSVC and Flutter 3.44.2.
The v0.1.0 tag identifies the source; release BUILD-INFO.json records its
full commit and SHA256SUMS covers the downloadable assets.
cargo test --workspace --locked -- --test-threads=2: 131 passed, zero failures, 14 intentionally ignored tests. The desktop was active and unlocked; both previously screen-lock-blocked IPC tests passed without exclusions.- The three opt-in crypto interoperability tests passed separately with synthetic identities: S/MIME, OpenPGP and Android APK/AAB-format signing.
- Rust formatting, workspace/all-target Clippy with
-D warnings, andcargo build --workspace --release --lockedpassed. Existing dependency future-compatibility notices remain. - Flutter analysis, Dart formatting and all 36 Flutter tests passed.
- Release CLI version/crypto help, relay help, and a real release DLL smoke test (initialize, lock, unlock, lock-all, close) passed with a disposable database.
- GitHub Actions could not start because GitHub reported an account payment or spending-limit restriction. These are local results, not remote CI results.
- Assets are unsigned Windows development binaries. Android NDK setup/download did not finish; Android/iOS artifacts and native device tests were not produced in this run. Linux/macOS builds and production release acceptance remain open.
| Windows artifact | SHA-256 |
|---|---|
memories.exe |
b8c2598e946bf1bcaca0cfb103ab1f4530b4f168579a5788a9ad73d86b252497 |
memories-relay.exe |
a810a647fea9a1a94a67a89e3c53801a38d46e41218f013b8394d176bb008d55 |
memories_ffi.dll |
b18925b45b84c4fdc1dafa16f6db5e4ea226629ff5d971a9289170c1c5cc4375 |
Logs are under target/release-20260918-*.log.
Mail cryptography and application signing (2026-09-17)
- Three opt-in interoperability tests pass with generated identities only: S/MIME signing/verification and PKCS#12 encryption/decryption; OpenPGP detached signing/verification and encryption/decryption; Android APK alignment/signing/ verification and AAB-format JAR signing/verification. The APK fixture has a real binary Android manifest; the AAB test is a synthetic JAR container, not a deployable App Bundle. No real account, identity or application was used.
- Host tools: Git for Windows OpenSSL 3.5.6, MSYS GnuPG 2.4.9, Adoptium JDK 17,
Android Build Tools 35.0.0 and the Android 36 platform JAR. GPG tests use
--msys-gpgand disposable keyrings. Run the opt-in tests with theMEMORIES_TEST_*tool paths named incrates/cli/tests/crypto_jobs.rsandcargo test -p memories --locked --test crypto_jobs -- --ignored --test-threads=1. - Core regressions cover local elevation, MCP denial, altered approvals, changed inputs/tools, existing outputs, secret-free audit/results, temporary credential cleanup, failed tool execution and tools that succeed without producing output. Five-language CLI help and non-macOS iOS rejection are also tested.
- Excluding the two screen-lock-dependent IPC cases below, the workspace run
passes 129 tests, with zero failures and 14 intentionally ignored tests
(subprocess helpers and the three separately executed tool tests). The command
is
cargo test --workspace --locked -- --test-threads=2 --skip actual_daemon_enforces_unlock_sudo_and_suppresses_child_secrets --skip catch_cli_stores_secrets_without_disclosure_and_requires_sudo. cargo build --workspace --locked, workspace/all-target Clippy with-D warnings, Rust formatting, diff whitespace and the updated skill'squick_validate.pycheck pass.- The full workspace run reached two existing live daemon/IPC failures while the
Windows session was disconnected/locked (
query userreportedDisc, with LogonUI in that session). The daemon's screen-lock hook revoked the synthetic sessions, producingLOCKEDor removed remote-session errors. Repeating those tests serially showed the same lock behavior. They require an active unlocked desktop; the lock protection was not disabled for testing. - iOS signing is implemented but not runtime-validated on macOS. No Android device is attached and no NDK is installed here; native mobile libraries, APKs and iOS artifacts were not rebuilt. Mobile FFI continues to reject desktop process jobs. Physical installation, Apple provisioning acceptance, PGP/MIME mail-client integration and store publication are not claimed.
AI client skill injection (2026-09-17)
- Before pushing, the staged skill-only snapshot was exported to an isolated
directory and passed
cargo test -p memories --locked --bin memories --test skill_injection --test localization: 25 passed, zero failures, four intentionally ignored subprocess helpers. Formatting also passes there. - Full working-tree validation, including the pre-existing wiki/clipboard changes:
cargo test --workspace --locked -- --test-threads=2: 127 passed, zero failures, ten intentionally ignored subprocess helpers invoked by parent scenarios. Existing authorization, MCP, storage, sync, FFI and relay regressions pass alongside the new installation tests. - Windows: nine new regressions pass (three unit tests and six CLI integration tests). They cover user/project directories, configuration overrides, duplicate targets, shared override paths, dry-run, idempotency, explicit replacement, conflict preflight, invalid inputs, sibling-file preservation and five-language help. Tests use disposable directories and do not start a daemon or initialize a Memories store.
- A separate Windows junction check confirms that
--forcerejects a linked skill directory before writing other targets and preserves its original file. The Unix symlink regression is included but was not executed on this host. cargo build --workspace --locked,cargo fmt --all --check,cargo clippy --workspace --all-targets --locked -- -D warnings, andgit diff --checkpass. Existing Rust dependency future-compatibility and FFI linker informational warnings remain.- The skill-creator
quick_validate.pycheck passes.cargo package -p memories --list --allow-dirty --lockedconfirms that the bundledSKILL.mdships with the CLI package. Installation requires no network access. - Discovery paths were checked against current Codex, OpenCode and Claude Code documentation. Live client discovery/model behavior, Linux/macOS execution, Claude Desktop/Cowork and cloud skill uploads were not exercised. No personal skill directories or client configurations were changed during validation.
Wiki secret references and clipboard (2026-09-17)
- Windows Rust workspace: 118 passed, zero failures, ten intentionally ignored subprocess helpers invoked by parent scenarios. Workspace build, Rust formatting and diff whitespace checks pass. The updated CLI, IPC and FFI paths were also checked in targeted runs after their final changes.
- Four core feature regressions pass: exact replacement, safe projections, local elevation/MCP isolation, metadata rejection (including escaped text), protected-card copies, binary/NUL rejection, sync, persistence and independent backup recovery. An additional targeted run verifies atomic rollback when replacement expands a document beyond the body-size limit, after the credential has been prepared. Signed historical content intentionally remains unchanged.
- The real CLI/daemon IPC suite passes (three tests and four explicitly invoked subprocess helpers), including replacement, masked reads and authorized copy delivery. The FFI regression passes with the same JSON operations and denies copies after native lock. All fixtures use synthetic secrets and disposable stores; no installed store or user clipboard was used.
- Flutter: 36 tests passed, including five new cases for hidden replacement
input, elevation before clipboard writes, discarded late responses after
background lock, copy failures, and reference preservation during editing.
Clipboard delivery uses a mocked platform channel. Flutter analysis, Dart
formatting and workspace/all-target Clippy with
-D warningspass. - Native Windows clipboard calls compile but were not exercised against the interactive clipboard. Linux/macOS clipboard helpers and mobile OS clipboard delivery were not run. No Android device was attached and no NDK was installed in the configured SDK; Android libraries/APK and iOS artifacts were not rebuilt.
- Logs:
target/wiki-secret-tests.log,target/wiki-atomic-tests.log,target/wiki-ipc-tests.log,target/wiki-ffi-tests.log,target/wiki-flutter-tests.log,target/wiki-clippy.log,target/wiki-workspace-tests.logandtarget/wiki-build.log.
Saved language preferences (2026-09-17)
- CLI tests: 19 passed, eight intentionally ignored subprocess helpers. Persistence tests launch separate CLI processes against disposable homes and verify saving/replacing a preference, startup and help selection, per-home isolation, temporary overrides, clearing the setting, malformed settings, and failed-write cleanup.
- Flutter tests: 31 passed. New regressions verify live system-locale changes update the interface and font fallback without writing a preference. Saved choices remain fixed; resetting to the system default survives restart.
- Flutter analysis, workspace/all-target Clippy with
-D warnings, Rust/Dart formatting, and diff whitespace checks pass. Native devices were not exercised. - Logs:
target/i18n/persistence-rust.txtandtarget/i18n/persistence-flutter.txt.
Five-language client and CLI (2026-09-17)
Host: Windows x86_64, Rust 1.98.1 MSVC, Flutter 3.44.2 / Dart 3.12.2.
- Rust workspace tests: 112 passed, ten intentionally ignored subprocess helpers. CLI localization tests also pass on the final CLI changes.
- Flutter widget/unit tests: 29 passed, including five system languages, English fallback, persisted language selection, unlocked-session preservation, phone-width dialogs, plural counts, and protected preview masking.
- Flutter analysis, Rust/Dart formatting, workspace/all-target Clippy with
-D warnings, and diff whitespace checks pass. Existing Rust dependency future-compatibility notices remain. - CLI help, nested help, locale precedence, and localized non-interactive errors were exercised through the actual binary. JSON fields and error codes remain stable. Widget screenshots were rendered at 390 x 844 with test-loaded fonts.
Local logs are in target/i18n/. The host HTTP proxy was excluded from Flutter's
loopback test connections. No Android/iOS device, native file picker, live OAuth
provider, or Linux/macOS runtime was exercised for this localization change.
Cloud recovery and revocation follow-up (2026-09-17)
Host: Windows x86_64, Rust 1.98.1 MSVC. Regression fixtures use synthetic data, temporary encrypted databases and loopback HTTP only.
cargo test --workspace --locked -j 2 --no-fail-fast -- --test-threads=2: 106 passed, ten intentionally ignored subprocess helpers. This includes all 24 cloud synchronization/HTTP integration tests.cargo fmt --all --checkand workspace/all-target Clippy with-D warningspass. The existing dependency future-compatibility notices remain.
The regression suite covers damaged download responses followed by healthy retries, rejected objects remaining distinct from successful imports, and a one-time rescan of legacy receipts. It also checks dependency downloads with a full inbox, eviction of unreferenced envelope buffers, and directory cursors remaining on a partially admitted page.
Revocation tests cover both queued data that must never be sent and an upload already in flight: the latter may finish, but the next request is prevented and its stale acknowledgement is rejected. The Google Drive fixture accepts duplicate names and rejects only duplicate file IDs. Its restart test interrupts the worker after the server accepts a file, verifies the ID was already stored locally, then checks that retrying creates exactly one envelope and one descriptor.
The HTTP fixture explicitly puts accepted sockets into blocking mode on Windows; otherwise they can inherit the listener's nonblocking mode and reset connections before request bytes arrive. The memory fixture now hides objects from both listing and direct downloads when simulating incomplete publication.
No live cloud account or Android/iOS native device was used for this follow-up. The platform and release acceptance limits recorded below still apply.
Reliability and mobile cloud follow-up (2026-09-17)
Host: Windows x86_64, Rust 1.98.1 MSVC, Flutter 3.44.2 / Dart 3.12.2. Synthetic secrets and disposable databases were used throughout.
- Rust workspace tests pass, including the real daemon stalled-client/lock regression. Focused tests additionally verify a blocked cloud HTTP request permits locking, concurrent provider runs are rejected, and a late acknowledgement cannot restore an invalidated session.
- Cloud regressions cover normal OneDrive download redirects without forwarding Bearer tokens, redirect loops/unsafe destinations, per-provider enqueue and reconnect, completed queue compaction past the old 256/4096 limits, and temporarily missing objects retrying after backoff. Revoked recipients no longer block preparation for active devices or keep a vault dirty forever. The HTTP fixture now lives until its owner stops it instead of expiring after 30 seconds.
- The Windows FFI test verifies pending background locks on both busy and idle handles and dispatch through the native cloud worker. Native OAuth validation rejects unsafe callbacks and malformed PKCE before network I/O.
- Rust formatting and workspace/all-target Clippy with
-D warningspass. Existingrussh/proc-macro-error2future-compatibility notices remain. - Flutter analysis and all 16 widget tests pass, including account status and manual locking while a sync request is in flight. Rust access/refresh tokens are never returned to Dart; AppAuth supplies the authorization code/verifier.
- The release storage benchmark runs with 10, 100 and 1000 synthetic records. Results and metric definitions are in performance.md. Audit append no longer derives the same device public key for every prior entry.
- Workflow YAML, embedded signing-configuration Python, Unicode Java-property escaping, Markdown links/fences and diff whitespace are checked locally.
Android SDK/NDK/emulator installation was attempted, but large official archive transfers were too slow to complete during this run. No Android APK/native-device result is claimed for this change. iOS builds require macOS and were not run. The new native CI jobs and manual Android signing workflow have not been run remotely. They are configured checks, not verified build artifacts.
No registered native OAuth client, real cloud consent, signed distribution, physical-device run or independent security review was performed. Google native redirect support must be validated separately for Android and iOS with the chosen registration. See release-checklist.md for acceptance gates. Installed memories binaries and real user vaults were not replaced.
First-release project naming (2026-09-17)
The project, repository, CLI, Rust and Dart packages, FFI symbols and header,
Android/iOS identifiers, storage names, environment variables and cryptographic
domains now consistently use memories. This first release has no previous-name
aliases or migration paths. The repository is
https://github.com/mbcc2006/memories.
Host: Windows x86_64, Rust 1.98.1 MSVC, Flutter 3.44.2 / Dart 3.12.2.
cargo test --workspace --locked -j 2 -- --test-threads=2: 89 passed, ten intentionally ignored subprocess helpers.cargo fmt --all --checkand workspace/all-target Clippy with-D warnings: passed.cargo build --workspace --release --locked -j 2: passed; CLI version and relay help both report the new name.- Six release CLI/daemon/FFI smoke checks passed with a disposable library:
native initialization/write/backup, daemon unlock/read,
MEMORIES_HOMEselection, CLI read and lock/unlock, native backup restore, and thememories_lock_allexport locking active native handles. - Dart formatting and
flutter analyze: passed. Flutter widget tests: 14 passed. The first widget run could not connect to the local test runner because of the host HTTP proxy; rerunning with proxy variables removed from that process and loopback inNO_PROXYpassed.
Local evidence is in target/rename-tests.log, target/rename-clippy.log,
target/rename-release-build.log, target/rename-e2e.log,
target/rename-e2e-report.json, target/rename-flutter-analyze.log, and
target/rename-flutter-tests.log. The E2E report binds its result to the CLI hash.
Android APK/iOS builds and native device integration tests were not run in this
rename. The real-service proxy E2E results in the next section describe their
earlier build; this section records the new release's local smoke checks.
| Windows release artifact | SHA-256 |
|---|---|
target/release/memories.exe |
3820d6d0d1effb64a98f3672cf7d8235739b22989c16c1c4112a1d2282012e5e |
target/release/memories-relay.exe |
9e92d253572f57256b423dd893dde5d580d711ffd84d22e39e8eceb3f5235221 |
target/release/memories_ffi.dll |
0cefa06d8527b5a9c9003636a1425cd7e2d0708f6b1d380ffaad9fc508b2c9af |
SSH/database proxies and release E2E (2026-09-16)
Host: Windows x86_64, Rust 1.98.1 MSVC. The release CLI/daemon was exercised
against disposable OpenSSH 8.9p1, PostgreSQL 14.24, MySQL 8.0.46 and Redis 6.0.16
servers in Ubuntu 22.04 WSL. Server packages were extracted into a private
temporary directory, with independent data, certificates and synthetic accounts;
no system services were installed. The test daemon used a disposable --home.
All fixture servers were stopped and their data/private keys removed afterward.
- Workspace regression: 88 passed, ten intentionally ignored subprocess
helpers. Command:
cargo test --workspace --locked -j 1 -- --test-threads=1. - Subsequent short-ID fixes passed all nine remote tests and the real daemon IPC scenario. The final shutdown fix passed the four proxy tests, both IPC scenarios, and an additional immediate-stop/lock regression with no shutdown sleep/join in the test client. These focused runs follow the full workspace run.
- Final workspace/all-target Clippy with
-D warnings, Rust formatting and diff whitespace checks passed. Existing dependency future-compatibility notices forrusshandproc-macro-error2remain; no lint error was suppressed. cargo build --workspace --release --locked -j 2passed. The rebuilt CLI version/help and relay help commands ran successfully. The installed daemon and user data were not replaced.- 11 real-service E2E checks passed using
scripts/test-proxy-e2e.pyagainst the rebuilt release binary. OpenSSH and SFTP clients, psycopg2, PyMySQL and redis-py connected to daemon-created loopback proxies without upstream secrets.
E2E coverage includes short-ID credential import and secret-read denial; SSH host-key mismatch rejection; stdout, stderr and exit-status forwarding; an SFTP upload/download; untrusted PostgreSQL TLS rejection; PostgreSQL SCRAM, verified TLS, Unicode and transaction rollback; MySQL caching-SHA-256, verified TLS and four-byte Unicode; Redis AUTH over TLS; MCP elevation isolation; explicit stop without interrupting other proxies; and lock closing all listeners plus already established SSH/database connections.
The first E2E run found that proxy stop returned while the accept loop could
still forward requests for up to 200 ms. The service now owns and joins the proxy
worker before acknowledging stop/lock. The final E2E rerun checks disconnection
immediately after the response and passes.
Local evidence: target/proxy-20260916-workspace-tests.log,
target/proxy-20260916-remote-tests.log, target/proxy-20260916-shutdown-tests.log,
target/proxy-20260916-close-regression.log, target/proxy-20260916-clippy.log,
target/proxy-20260916-release-build.log, target/proxy-20260916-e2e.log, and
target/proxy-e2e/results/report.json. The report binds the E2E result to the CLI
SHA-256 below. The reusable script requires externally provisioned disposable
fixtures as described in its module documentation; it does not install servers.
| Windows release artifact | SHA-256 |
|---|---|
| Windows CLI (historical build) | eea9ee3db29ea26e0dbf0d8090475eed05e2653936cc70816ea5147b1240447f |
| Windows relay (historical build) | 34d4a15094031e47d1d9086291d52d04419caf509b848dbc1ae41fa57f491c3a |
| Windows FFI library (historical build) | f02e7efaff6fa182e3d9cd047289aad184c3c441277539bbf5920038fb149bfd |
Android/iOS artifacts and native runtime tests were not rebuilt or run in this desktop proxy change. No production SSH/database or live cloud account was used.
Cloud object sync (2026-09-16)
Added a provider-neutral immutable-object runner with durable outbox/inbox
receipts. Coverage is in crates/core/src/sync.rs unit tests and
crates/core/tests/cloud_sync.rs:
- Exact envelope bytes persist across process reopen; a failed put retries the same object ID without re-encrypting.
- Duplicate put downloads and verifies the existing object before marking the job uploaded.
- A descriptor listed before its envelope stays pending; revealing the envelope and reordering/duplicating the listing still imports once.
- A corrupted download is recorded as
corruptand does not merge vault state. - Lock and logout increment the sync session so a late
CloudSyncAckcannot import; incomplete outbox jobs remain in encrypted state after unlock until cancelled by logout. - Two paired devices exchange concurrent edits over
MemoryTransport. - Local-only vaults and MCP callers cannot enqueue or inspect work. Backups and
restored libraries have empty
cloud_syncand no cloud accounts.
Daemon-owned SSH/FTP/TCP sessions with per-instruction propose/approve/exec
were added (crates/core/src/remote.rs, crates/core/tests/remote.rs).
MySQL, Redis, and PostgreSQL sessions keep state on the live connection and
enable TLS by default (hostname verification; optional PEM CA credential).
--no-tls is explicit. Live database TLS handshakes were not run.
SSH/TLS key generation keeps private keys inside credential storage; tests
assert generate/public responses contain no private key PEM.
Loopback SSH/Redis proxies inject stored credentials so a local client can
connect without the secret; lock sets the proxy stop flag. Live accounts were
not used.
Token refresh, OneDrive/Google Drive adapters, daemon CloudSyncRun, and
memories cloud sync were added. Coverage is in cloud.rs refresh tests and
crates/core/tests/cloud_drive.rs loopback fixtures. Live Microsoft/Google
accounts were not authorized. Mobile login/sync UI was not added.
Local check on 2026-09-16 (Windows x86_64, rustc 1.98.1 GNU, MinGW-w64 GCC 16.2.0):
cargo test -p memories-core --locked -j 1 -- --test-threads=1: 49 passed, two intentionally ignored subprocess helpers.cargo clippy -p memories-core --all-targets --locked -- -D warnings: passed.cargo fmt --all: passed.
Repository review (2026-09-09)
- Windows Rust workspace: 51 passed, zero failures. Ten intentionally ignored
subprocess helpers are launched explicitly by their parent tests. Command:
cargo test --workspace --locked -j 1 -- --test-threads=1. - Initialization tests kill a process after staging and before publication, then successfully recreate/unlock the store. Existing destinations, including a file appearing during initialization, remain intact; the destination OS lock stays held until publication finishes. This does not simulate physical power loss.
- Credential capture rejects duplicate JSON keys, including nested objects and escaped-equivalent names. Tests retain valid array/pointer/string behavior, error redaction, and rejection through actual CLI/daemon IPC.
- A delayed HTTP profile fixture confirms OAuth network latency cannot extend access-token validity. Existing provider exchange and lock/logout cancellation regressions pass. Relay WebSocket tests now include Ping/Pong; control replies use the same ten-second send timeout as queued data. A saturated-socket soak test was not performed.
- Workspace/all-target Clippy with
-D warnings, Rust/Dart formatting, diff whitespace, and local Markdown link/fence checks passed. Flutter analysis reported no issues; all 14 widget tests passed. - The rebuilt Windows FFI passed disposable synthetic-data checks for successful initialization without leftover staging files, stale-ticket rejection after lock, encrypted account persistence across reopen, metadata-only status and local logout. The fixture was removed afterward.
- Local logs:
target/review-20260909-rust-tests.log,target/review-20260909-clippy.log, andtarget/review-20260909-flutter-tests.log. Rust usedD:/memories-build-cache/cardswith one build job/test thread. - No live Microsoft/Google authorization, Android/iOS native execution, or Linux/macOS runtime check was performed in this review. Installed binaries were not replaced; remote CI and release artifacts were not validated.
Cloud authorization (2026-09-09)
- Windows Rust workspace: 47 tests passed, including cloud authorization and storage fault regressions. Nine helper tests are excluded from discovery and explicitly launched by their parent scenarios.
- Workspace/all-target Clippy with
-D warnings, Rust formatting, and diff whitespace checks passed. The final nonblocking browser-launch adjustment was followed by the CLI cloud tests, Clippy, and a fresh CLI/FFI build. - Both OAuth providers were exercised with local HTTP fixtures: PKCE, state, account identity, scope checks, missing refresh tokens, response limits, rejected redirects, and generic errors without secret reflection.
- A real loopback socket test rejected an unrelated callback and accepted the matching callback without reflecting its code into the HTTP response.
- Core regressions checked caller/provider binding, replay, lock/logout cancellation, encrypted persistence, audit/MCP isolation, and the absence of cloud tokens from decrypted backup and synchronization payloads.
- A temporary Windows FFI fixture using synthetic tokens passed authorization
persistence across close/reopen, cancellation by
memories_lock_all, and logout. The fixture was removed afterward. - No registered client configuration or live cloud account was supplied, so real Microsoft/Google consent and token issuance remain unverified. No cloud files were uploaded. No Android device/emulator was attached; Android/iOS native execution and mobile login UI were not validated in this change.
- Local development binaries were built; installed CLI/daemon binaries were not replaced, and no remote CI or release result is claimed.
Pre-push validation (2026-09-09)
- Rust workspace regression: 30 passed; two IPC child helpers remain explicitly invoked by the parent scenario. Short-ID collision, history, protected-reference and grant roundtrips are included.
- Workspace/all-target Clippy with
-D warningsand Rust formatting passed. The short-ID parity check was updated tois_multiple_of; both ID unit tests passed again after that equivalent lint correction. - Dart formatting, Flutter analysis and all 14 widget tests passed.
- Windows tests used
D:/memories-build-cache/cards, one build job and one test thread. Old PDB files causing LNK1201/LNK1207 were preserved with a.pre-push-20260909suffix before regeneration. The successful workspace log istarget/push-20260909-rust-tests.log. - Release binaries and Android artifacts were not rebuilt during this check; the earlier artifact hashes below do not validate the new short-ID protocol. Remote CI results are tracked separately.
Password length follow-up (2026-09-09)
Local and backup passwords no longer have an application-level minimum or maximum length policy. Empty input is accepted. Confirmation, Argon2id parameters, authentication, sudo scope, and encrypted storage remain in place.
- New core regression passed for lengths 0, 1 and 4096: storage creation, authentication, unlock, backup and recovery; incorrect passwords are rejected.
- Workspace/all-target Clippy with
-D warningsand Rust formatting passed. - Flutter analysis and all 14 widget tests passed, including initialization with empty and one-character passwords while retaining the confirmation step.
- Rebuilt Windows CLI/FFI and restarted the local daemon. A separate temporary fixture against the release FFI passed one-character init/unlock/sudo, an empty backup password, and recovery protected by a one-character password.
- Rebuilt both Android ABIs and the normal-entrypoint APK. Source/merged and stripped/APK native library equality checks passed. Android runtime integration was not rerun for this length-only change; the native test fixture now uses a one-character password for the next device run.
These hashes supersede the earlier artifact records. The build log is
target/password-length-android-build.log; detailed ABI hashes are in
target/password-length-artifacts.json.
| Artifact | SHA-256 |
|---|---|
| Windows CLI (historical build) | 0b35b8becadccfcb82d41ccca6c231880fa29003f60eb84ac590953ddf4ed10d |
| Windows FFI library (historical build) | 2556e0bc894584520b6b7311e1889680a5cd28bc9c36a180f8b986ce59aca04c |
mobile/build/app/outputs/flutter-apk/app-debug.apk |
4167422819f7ed8ec5cd41faab7e0ac598b26d40e0869cec8f81906de6efc2d3 |
Cards, protected metadata and OTP follow-up
The following feature checks and artifacts supersede the baseline build hashes recorded later in this document. All credentials used during validation were synthetic; no supplied account credentials or mail servers were used.
- Rust workspace regression: 25 passed. The extended CLI IPC scenario and RFC 6238/malformed-input checks also passed after their final test additions. Two helper tests are deliberately ignored by discovery and explicitly executed by the IPC scenario (credential injection and sibling-process sudo).
- Rust formatting and workspace/all-target Clippy with
-D warnings: passed. Windows debug checks usedD:/memories-build-cache/cardsand-j 2. - Flutter analysis and all 12 widget tests: passed. Coverage includes a phone-size graph, directed backlinks, masked previews, private OTP authorization, expiry, and closing the OTP dialog on background/lock.
- Rebuilt the Windows release workspace. A real release CLI with a temporary encrypted store recorded Python 3.13.1 and its executable directory, marked the vault local-only, and found the observation through card search. The fixture and daemon were removed after the check.
- Rebuilt ARM64/x86_64 Android FFI libraries. The API 35 x86_64 emulator passed the
real FFI integration test: cards/links/graph, dotenv key-only search, TOTP
generation, credential read denial, audit and lock/unlock. Log:
target/cards-android-native-test.log. - Rebuilt and installed the normal-entrypoint development APK after the integration
test. Startup, password initialization, library creation, and opening the new
protected-card form succeeded. Further manual account-form submission was
interrupted when the emulator disappeared from ADB; that additional manual
scenario is not recorded as passed. Startup XML:
target/cards-android-startup.xml; build log:target/cards-android-build.log. - Packaged native libraries were checked per ABI: source equals Gradle merged
output, and stripped output equals the APK entry. Evidence and sizes:
target/cards-artifacts.json.
Core security tests cover separate encrypted credential storage, atomic failure, secret absence in search/list/graph/MCP/audit and plaintext database bytes, reference-replacement denial, host restriction/header injection, local-only exclusion from pairing/sync/backup, and OTP references after sync/recovery. RFC 6238 coverage includes all six standard timestamps for SHA-1/SHA-256/SHA-512, plus six-digit output and malformed seed/period rejection. HTTP header tests use synthetic values and verify sensitive-header marking; no authenticated request to a production service was made.
Current artifacts (development build, not signed for distribution):
| Artifact | SHA-256 |
|---|---|
| Windows CLI (historical build) | 9ff3d67b145508935e793dd7ce9b773d9f373549a8b08479de2f9c31a499dbd3 |
| Windows relay (historical build) | 4aae7b45fbe9e009a7f118a384d246b3c878f2e43da821110c8e4bb5ef5a091a |
mobile/build/app/outputs/flutter-apk/app-debug.apk |
4551a72acab24cfdfb6279f2e27507ca24a938ee716417fb99e4bad96847a9fe |
Packaged Rust SHA-256:
| ABI | SHA-256 |
|---|---|
arm64-v8a |
eb8013d2bde1041412d08deb074f3fbbab7a24400e7cdde4cec890398b58f6a9 |
x86_64 |
cf34d3a09ba0c417460625d2f2ddf102cb891241e64de97f09479b63449f1aa9 |
Platform limitations at the end of this document still apply. This section records local validation; no remote CI result is claimed here.
Baseline Windows Rust workspace
Host: Windows x86_64, stable Rust 1.98, MSVC toolchain, bundled SQLite.
| Check | Result |
|---|---|
cargo fmt --all --check |
Passed |
cargo clippy --workspace --all-targets --locked -j 1 -- -D warnings |
Passed |
cargo test --workspace --locked -j 1 -- --test-threads=1 |
18 passed, 1 intentionally ignored helper |
cargo build -p memories -p memories-relay --release --locked -j 1 |
Passed |
cargo ndk -t arm64-v8a check -p memories --locked -j 1 |
Passed; Unix conditional code compilation only |
The ignored test is the child executable used by the IPC test and is explicitly run there under credential injection. It is not a skipped security scenario.
The tests exercise authenticated encryption and transport tampering, encrypted SQLite state, incorrect passwords, checkpoint truncation, chunk ordering, permissions, device approval and revocation, identity reauthorization denial, shared membership, replay, concurrent revisions, policy fork resolution, and independent backup recovery. A real CLI daemon test covers unlock, terminal sudo, credential read denial, executable digest approval, child output suppression, signed audit, MCP scope and locking. A real WebSocket test checks live routing and room cleanup after disconnection.
The Windows named-pipe implementation uses blocking framing. An attempted
PIPE_NOWAIT implementation failed the real-daemon regression and was replaced;
same-user availability limits are documented in SECURITY.md.
Baseline Windows artifacts (paths relative to the checkout; build outputs are ignored by
Git). The CLI also passed --version and --help execution:
| Artifact | SHA-256 |
|---|---|
| Windows CLI (historical build) | c9086eb0dfabc0fbdb0ce8ba37a8f82b837c551138aa8d2fe900df2e6d4b7495 |
| Windows relay (historical build) | 7a3713068f28d10e4c839a5c0587b85e1502b1a8bc7fe4ef6e42b8c349244b77 |
Flutter and mobile native libraries
Toolchain: Flutter 3.44.2 / Dart 3.12.2, Android NDK 28.2.13676358, Android SDK platforms 35, 36, and 37.0, Gradle 9.1.0.
| Check | Result |
|---|---|
dart format --output=none --set-exit-if-changed lib test integration_test |
Passed |
flutter analyze |
Passed, no issues |
flutter test |
3 widget tests passed |
| ARM64 and x86_64 Android Rust FFI release builds | Passed |
| Android API 35 x86_64 emulator native integration test | Passed |
| Normal Android APK installation and UI smoke flow | Passed |
Widget tests verify that native startup failure leaves the library locked, backgrounding dismisses content dialogs and clears the authorization state, and idle expiry also dismisses an already-open content dialog. Late asynchronous responses are rejected after a mobile authorization generation changes. The native integration test uses a temporary on-device database rather than a mock backend. It initializes the real Rust service, writes and reads memory, requires elevation to add credentials, rejects credential reads, verifies the audit chain, locks all native handles, and unlocks persisted content without restoring elevation. The fixture directory is removed after the test.
The emulator runs an existing API 35 x86_64 image in read-only mode, with no
snapshot saved. Test output is available locally at
target/android-native-test.log. The Android build emits a legacy SDK XML-version
warning from a plugin toolchain, but this did not prevent compilation or native
execution. The app's compile SDK is 37 to meet secure-storage plugin requirements.
The final normal-entrypoint APK was rebuilt after integration testing, installed,
and exercised through Android UI automation. Checks passed for startup with the
actual secure-storage plugin, password initialization, creating a library and
memory, reading that memory, backgrounding while content is open, returning to a
locked screen, and unlocking to read persisted content again. This checks the
normal app, not just the integration-test entrypoint. UI evidence is stored in
target/android-ui-startup.xml, target/android-ui-initialized.xml,
target/android-ui-memory-saved.xml, target/android-ui-content-open.xml,
target/android-ui-background-locked.xml, and
target/android-ui-unlocked-persisted-content.xml. Only synthetic test data was
used. The read-only emulator was stopped after verification.
Baseline APK: mobile/build/app/outputs/flutter-apk/app-debug.apk, 177,630,089 bytes.
SHA-256: 1d671906316c139eca786e89a5cca2c5d7895a825c0d58f4c32e71e6ff8be382.
This is a debug-signed development APK, not a store release.
Both arm64-v8a and x86_64 include the Flutter engine and Rust FFI library.
The source JNI libraries match Gradle's merged libraries; Gradle's stripped
libraries match the final APK contents. Symbol stripping explains why a raw
source-to-APK hash comparison differs. Packaged Rust library SHA-256 values:
| ABI | SHA-256 |
|---|---|
arm64-v8a |
6475026924b2e0434b1bbb945b21f9fa1684c53760ba228a72e062e519835d8c |
x86_64 |
3a208026380c0cc164f1f80c25de6daad3120857c4f2c9e96bf34e91912e9c1e |
The Windows debug build cache was moved to
D:/memories-build-cache/20260908/windows-debug to free disk space for emulator
validation. Source files and release artifacts remain in the checkout. Android
builds used a task-specific target/gradle-home to avoid the host's stale proxy
configuration, plus a local repository containing the exact Flutter engine JARs
verified against official HTTPS metadata. No engine code or plugin cache source
was modified. The caches, wrapper, and jdks directories in this Gradle home
are junctions into the host Gradle cache.
Platforms and remaining validation
- Linux and macOS desktop runtime checks have not run on this Windows host. Android cross-compilation does not establish Linux or macOS runtime correctness.
- iOS Xcode compilation, simulator/device execution, signing, Keychain behavior, and the native XCTest require a macOS host and have not run here.
- Android ARM64 physical-device execution has not run; successful cross-compilation alone does not establish hardware behavior or secure-storage guarantees.
- CI defines Windows/Linux/macOS Rust checks and Flutter checks, but no remote CI results are claimed. No release signing or store publication has occurred.
- No independent cryptographic review, penetration test, or large-scale resource
test has been performed. See
SECURITY.mdbefore using real secrets.
Client defaults and skill generate (2026-10-01)
memories default set/get/deleteround-trip under a disposable--home, reject unknown keys and invalidtypevalues, and removedefaults.jsonwhen empty.- List commands apply
vault/type/categorydefaults when flags are omitted. - Persona world/thing/event commands resolve omitted vault/asset from
persona/vaultdefaults (VAULT/ASSET, slash form, or asset with vault default). memories skill generate/agents generatewrite AGENTS.md or skill-layoutSKILL.mdoffline without a persona; refuse overwrite without--force.cargo test --workspace --lockedcovers unit and integration tests for these paths.