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
15 changes: 14 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,24 @@ All notable changes to GitHub Vault Relay will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

Current repository evidence is 42 test files and 443 passing tests; `npm run verify` passed locally on 2026-10-07. Test totals in older release entries are historical snapshots from those releases, not current totals.
Current repository evidence is 44 test files and 482 passing tests; `npm run verify` passed locally on 2026-10-08. Test totals in older release entries are historical snapshots from those releases, not current totals.
Paths and implementation details in older entries are historical release snapshots; the current internal path is `${app.vault.configDir}/github-vault-relay/`.

---

## [1.2.0] - 2026-10-08

### UI Modernization & Architecture Consolidation
- **Unified Modal Architectures**: Consolidated duplicate Pull/Push modal pairs into parameter-driven `SyncConfirmModal` and `SyncResultModal`. Pruned 4 redundant legacy modal files (`pullConfirmModal.ts`, `pushConfirmModal.ts`, `pullResultModal.ts`, `pushResultModal.ts`), eliminating over 930 lines of boilerplate while maintaining 100% feature and telemetry parity.
- **Embedded Dashboard File Inspection**: Integrated interactive, expandable change inspection directly within `SyncDashboardModal`. Vault changes can now be filtered by category (*All, Local Only, Remote Only, Local Changed, Remote Changed, Conflicts, Deletes*) and inspected without opening separate stacking modal dialogs on mobile devices.
- **Mobile-First Stylesheet & Responsive Touch UX**: Eliminated all inline style string attributes across UI components in favor of clean semantic classes in `styles.css`. Modernized action buttons for small viewports (`@media (max-width: 480px)`) into full-width stacked layouts, preventing button line-breaks while guaranteeing minimum 44px tap targets and `safe-area-inset-bottom` padding.
- **SettingsTab Declarative Consolidation**: Replaced duplicate imperative DOM creation in `VaultRelaySettingTab.display()` with an iterator over `getSettingDefinitions()`, cutting ~250 lines of duplicate settings logic and strongly typing setting definitions with 0 ESLint warnings.

### Verification & Test Suite Hardening
- **Empirical Challenger & Stress Suites**: Added comprehensive adversarial stress suites (`tests/empiricalChallengerM1.test.ts` and `tests/m1ChallengerStress.test.ts`) covering 39 edge-case, reentrancy, and execution lifecycle scenarios.
- `npm run verify`: PASS — 44 test files, 482 tests passing, 0 lint warnings, clean typecheck, clean production build.
- `verify-release.mjs`: PASS — All manifests, package, lockfile, and documentation files strictly synchronized.

## [1.1.0] - 2026-10-07

### Security & Hardening
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@

> A conservative GitHub sync bridge for Obsidian mobile and desktop, without running Git on the phone.

[![Version](https://img.shields.io/badge/version-1.1.0-blue.svg)](https://github.com/ankhang0704/github-vault-relay/releases)
[![Version](https://img.shields.io/badge/version-1.2.0-blue.svg)](https://github.com/ankhang0704/github-vault-relay/releases)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

## Current canonical baseline

- Release: `1.1.0` (manifest, package, tag, and `main` agree after release).
- Release: `1.2.0` (manifest, package, tag, and `main` agree after release).
- Minimum Obsidian version: `1.11.4`.
- Mobile support: enabled (`isDesktopOnly: false`).
- Automated evidence: 42 Vitest test files and 443 passing tests in the current tree.
- Latest local quality gate: `npm run verify` PASS on 2026-10-07 (lint, typecheck, test, build).
- Automated evidence: 44 Vitest test files and 482 passing tests in the current tree.
- Latest local quality gate: `npm run verify` PASS on 2026-10-08 (lint, typecheck, test, build).
- The production bundle is generated by `npm run build`; `npm run verify` is the canonical gate.
- Release-gate physical acceptance is PASS on Windows and iPhone for settings, hidden paths, normal files, and restart behavior. See [the manual matrix](docs/MANUAL_TEST_MATRIX.md) for the recorded sign-off.

Expand Down
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Security Policy

Vault Relay is a conservative GitHub bridge. The current supported release is `1.1.0`; older releases are not the active security baseline.
Vault Relay is a conservative GitHub bridge. The current supported release is `1.2.0`; older releases are not the active security baseline.

## Credential storage

Expand Down
2 changes: 1 addition & 1 deletion docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# GitHub Vault Relay: System Architecture

This document describes the architecture that exists in the current `1.0.9` source tree. File references are the evidence; diagrams are summaries, not a redesign proposal.
This document describes the architecture that exists in the current `1.2.0` source tree. File references are the evidence; diagrams are summaries, not a redesign proposal.

## System context

Expand Down
10 changes: 5 additions & 5 deletions docs/PROJECT_SOURCE_OF_TRUTH.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ This is the current factual reference for Vault Relay. When this document confli
| Fact | Canonical value | Evidence |
| :--- | :--- | :--- |
| Plugin/package | `github-vault-relay` | `manifest.json`, `package.json` |
| Release | `1.1.0` | `manifest.json`, `package.json`, Git tag `1.1.0` after release |
| Release | `1.2.0` | `manifest.json`, `package.json`, Git tag `1.2.0` after release |
| Minimum Obsidian version | `1.11.4` | `manifest.json`, `tests/manifest.test.ts` |
| Mobile | Supported; `isDesktopOnly: false` | `manifest.json`, `tests/manifest.test.ts` |
| Remote service | GitHub REST/Git Data API over HTTPS | `src/github/githubClient.ts` |
| Test files | `42` | `tests/*.test.ts`, current `vitest run` output |
| Passing tests | `443` | current `vitest run` output |
| Quality gate | `PASS` (`npm run verify`, 2026-10-07) | `package.json`, local gate run |
| Test files | `44` | `tests/*.test.ts`, current `vitest run` output |
| Passing tests | `482` | current `vitest run` output |
| Quality gate | `PASS` (`npm run verify`, 2026-10-08) | `package.json`, local gate run |

The stable 1.1.0 release is published at `https://github.com/ankhang0704/github-vault-relay/releases/tag/1.1.0`. Provenance is generated by `.github/workflows/release.yml` from immutable tag `1.1.0`.
The stable 1.2.0 release is published at `https://github.com/ankhang0704/github-vault-relay/releases/tag/1.2.0`. Provenance is generated by `.github/workflows/release.yml` from immutable tag `1.2.0`.

`main.js` is a generated, ignored build artifact. The current production build identity is recorded by the verification run and should be regenerated rather than hand-edited. The manual matrix records release asset testing for reproducible device verification.

Expand Down
2 changes: 1 addition & 1 deletion manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"id": "github-vault-relay",
"name": "GitHub Vault Relay",
"version": "1.1.0",
"version": "1.2.0",
"minAppVersion": "1.11.4",
"description": "A conservative GitHub bridge for mobile and desktop vault sync without requiring Git on the phone.",
"author": "Vault Relay Contributors",
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": "github-vault-relay",
"version": "1.1.0",
"version": "1.2.0",
"description": "A conservative GitHub bridge for mobile and desktop vault sync without requiring Git on the phone.",
"main": "main.js",
"scripts": {
Expand Down
7 changes: 3 additions & 4 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ import {
} from "./settings";
import { SyncDashboardModal } from "./ui/syncDashboardModal";
import { SyncPreviewModal } from "./ui/syncPreviewModal";
import { PullConfirmModal } from "./ui/pullConfirmModal";
import { PushConfirmModal } from "./ui/pushConfirmModal";
import { SyncConfirmModal } from "./ui/syncConfirmModal";
import { GitHubClient } from "./github/githubClient";
import { sanitizeErrorMessage } from "./security/redact";
import { CANONICAL_SECRET_KEY, getStoredPat } from "./security/secretStore";
Expand Down Expand Up @@ -79,7 +78,7 @@ export default class VaultRelayPlugin extends Plugin {
id: "pull-safe-changes",
name: "Pull safe remote changes (GitHub -> Local)",
callback: () => {
new PullConfirmModal(this.app, this).open();
new SyncConfirmModal(this.app, this, "pull").open();
},
});

Expand All @@ -88,7 +87,7 @@ export default class VaultRelayPlugin extends Plugin {
id: "push-safe-changes",
name: "Push safe local changes (Local -> GitHub)",
callback: () => {
new PushConfirmModal(this.app, this).open();
new SyncConfirmModal(this.app, this, "push").open();
},
});

Expand Down
Loading
Loading