Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
139bff9
Stage 1: Multipart sync client and metadata migration
NateEaton Mar 20, 2026
478c882
Add save-to-downloads and selectable text for log viewer
NateEaton Mar 20, 2026
dbe08c9
Stage 2: On-demand content packages with WebViewAssetLoader
NateEaton Mar 20, 2026
f5370b4
Fix NewApi lint error in log save-to-downloads
NateEaton Mar 20, 2026
032d16f
Fix blank images in article lightbox when using offline content
NateEaton Mar 20, 2026
50fd6a8
Add TODO for researching incremental article content rendering
NateEaton Mar 20, 2026
051783b
Stage 3: Automatic content packages, freshness check, storage management
NateEaton Mar 20, 2026
3465216
Fix duplicate image in picture bookmark reader with content packages
NateEaton Mar 20, 2026
874080a
Fix narrow picture content by adding figure/figcaption CSS to templates
NateEaton Mar 20, 2026
d8edb26
Fix storage size not updating after content downloads complete
NateEaton Mar 20, 2026
026c457
Stage 3a: Offline annotation support for content packages
NateEaton Mar 20, 2026
36ec702
Fix annotation support for multipart content packages
NateEaton Mar 21, 2026
1e18368
detail: populate omitDescription via API refresh when unknown and per…
NateEaton Mar 21, 2026
f753b40
sync: commit remaining multipart enhancements and dependent updates; …
NateEaton Mar 21, 2026
e988924
i18n: add video_embed_offline placeholders to locales
NateEaton Mar 22, 2026
ef9209a
Stage 4: fix initial sync, video content packages, embed preservation…
NateEaton Mar 22, 2026
6c4541a
Fix on-demand content loading progress bar to show deterministic prog…
NateEaton Mar 22, 2026
537a4c8
spec: update sync-multipart-adoption-spec with implementation status …
NateEaton Mar 22, 2026
593e41d
Add Espresso testing doc and fix smoke test
NateEaton Mar 23, 2026
f0aaef3
spec: add diagnosis and fix plan for reader text reflow/truncation bug
NateEaton Mar 23, 2026
52ea4b7
spec: remove sync-multipart-adoption-spec-addendum (superseded)
NateEaton Mar 23, 2026
d31139a
docs: archive four superseded spec files
NateEaton Mar 23, 2026
da614af
fix: BookmarkDto embed_hostname → embed_domain; add unit tests for St…
NateEaton Mar 23, 2026
0058b08
Fix omitDescription not persisting: SyncRequest was silently omitting…
NateEaton Mar 24, 2026
52a246e
spec: add field note documenting omitDescription serialization bug an…
NateEaton Mar 24, 2026
25d19b5
Fix picture/video stuck at PERMANENT_NO_CONTENT after offline open
NateEaton Mar 24, 2026
5a45f0a
Fix annotation rendering: eliminate WebView repaint, sync from other …
NateEaton Mar 24, 2026
63d5e37
Fix embed-only videos opening in web view on first load
NateEaton Mar 24, 2026
621b42d
Fix video opening in web view after first offline open
NateEaton Mar 24, 2026
45e0b55
Reorder content package commit and clarify video eligibility
NateEaton Mar 24, 2026
585e45c
Archive debug verification task spec — already implemented
NateEaton Mar 25, 2026
4ede2a1
Fix auto content sync enqueue on empty delta sync
NateEaton Mar 25, 2026
ebb922c
Enqueue auto content sync after full sync
NateEaton Mar 25, 2026
4402d65
spec: granular offline content management (#130)
NateEaton Mar 26, 2026
dcec510
docs: update granular offline content management spec with resolved d…
NateEaton Mar 26, 2026
a43e086
feat: implement granular offline content management (complete)
NateEaton Mar 27, 2026
832a831
feat: redesign sync settings, compact card icons, and reading view cl…
NateEaton Mar 27, 2026
ca2dcd1
fix: case-sensitive label filtering and add Codeberg.org to About screen
NateEaton Mar 27, 2026
483fb73
chore(ci): first draft workflow revision
NateEaton Mar 27, 2026
f1a452a
chore(ci): align workflows with snapshot tester flow
NateEaton Mar 27, 2026
b68f077
fix(offline): patch image refresh and badge layout
NateEaton Mar 28, 2026
6f258c1
fix(build): use debug signing only as local fallback
NateEaton Mar 28, 2026
110184f
docs(spec): define managed offline reading direction
NateEaton Mar 28, 2026
351beed
feat: Implement Managed Offline Reading with Storage Budgeting and UI…
NateEaton Mar 28, 2026
ce1ff24
Managed Offline Reading - Phase 5: UI Alignment, Performance Optimiza…
NateEaton Mar 28, 2026
79bc565
fix(ui): refine download status indicator placement across card layouts
NateEaton Mar 29, 2026
e63ca35
fix(reader): eliminate lag, broken images, and wrong highlight positi…
NateEaton Mar 30, 2026
fb9a50f
Fix annotation image breaking issue
NateEaton Mar 31, 2026
215e228
Fix scroll restore loop early-exit latency
NateEaton Mar 31, 2026
62151b8
fix(detail): show domain name in bookmark details URL field
NateEaton Apr 1, 2026
060e2b5
Refine bookmark reader open diagnostics and reduce WebView churn
NateEaton Apr 1, 2026
93823a7
fix(detail): open full URL in browser from bookmark details link
NateEaton Apr 1, 2026
5b913ec
Update offline reading docs and branch notes
NateEaton Apr 1, 2026
aa579ae
Add API inspection tool and pre-merge documentation (#131)
NateEaton Apr 1, 2026
a5753fe
Fix offline status icon docs in bookmarks guide
NateEaton Apr 1, 2026
0a99bfe
chore: ignore _notes directory
NateEaton Apr 1, 2026
18a621e
Add .claude/ to .gitignore
NateEaton Apr 1, 2026
843edd1
docs: correct Fix 1 spec to gate deleteResources on updateHtml() succ…
claude Apr 1, 2026
e65d381
feat: add pre-merge guardrails + unit tests
NateEaton Apr 2, 2026
4470e28
fix: fall back to full sync on delta failure; guard resource path tra…
NateEaton Apr 2, 2026
e1aa14f
fix: image storage limit refinements (intermediate — testing in progr…
NateEaton Apr 2, 2026
5796460
Add intermediate chat docs
NateEaton Apr 2, 2026
bf2eb9c
Add unified offline content architecture specification and implementa…
NateEaton Apr 2, 2026
4fa5bac
Add unified offline content architecture spec and implementation plan…
NateEaton Apr 3, 2026
45c7c38
Slice 1: Formalize content state semantics
NateEaton Apr 3, 2026
c5ee09b
Slice 2: Update bookmark card icon logic for new semantics
NateEaton Apr 3, 2026
53370a1
Slice 3: Remove per-bookmark content management UI and dead code
NateEaton Apr 3, 2026
74da5f5
Slice 4: Remove two-tier managed offline infrastructure
NateEaton Apr 3, 2026
1735e0d
unified-offline: Slice 5 — remove hasResources from annotation HTML r…
NateEaton Apr 3, 2026
23805bd
unified-offline: Slice 6 — priority full-package download on demand open
NateEaton Apr 3, 2026
180deb6
unified-offline: preserve text caches before slice 7
NateEaton Apr 3, 2026
6ec4371
unified-offline: add slice 7 policy engine
NateEaton Apr 3, 2026
82f90eb
unified-offline: redesign slice 8 settings UI
NateEaton Apr 3, 2026
0bacdb4
unified-offline: scope-drive archive behavior and defer slices
NateEaton Apr 4, 2026
041af9b
unified-offline: implement slice 10 lifecycle transitions
NateEaton Apr 4, 2026
564b0ad
unified-offline: redesign sync settings screen (Slice 8)
NateEaton Apr 4, 2026
a3de780
unified-offline: sync settings polish and cleanup
NateEaton Apr 4, 2026
6e46d89
ci: fix workflow if conditions to prevent double-runs on push+PR
NateEaton Apr 4, 2026
b13e517
unified-offline: add unit tests for policy evaluator and batch worker…
NateEaton Apr 4, 2026
04702c9
fix(ui): restore weight(1f) on site name text in Grid and Compact cards
NateEaton Apr 4, 2026
4afff4b
docs: add implementation specs for TOC fragment navigation and Highli…
NateEaton Apr 4, 2026
d3e0969
docs: reorganise specs — archive implemented docs, remove transient n…
NateEaton Apr 4, 2026
48ba205
docs: reorganise docs/ root — archive overhaul summary, rename TODO
NateEaton Apr 4, 2026
27ed81e
Add dynamic subtitles to Settings page
NateEaton Apr 5, 2026
2361e84
Fix hardcoded strings in Settings subtitles
NateEaton Apr 5, 2026
03a46e6
docs: refresh pre-release cleanup tracker and add impl plan
NateEaton Apr 5, 2026
c52bd6c
docs: resolve Slice 6 unread field as remove; drop stale OAuth item
NateEaton Apr 5, 2026
09078f1
fix: update SettingsViewModelTest for new constructor parameters
NateEaton Apr 5, 2026
637ce8b
Refine hysteresis to one-sided buffer and fix stalled-progress infini…
NateEaton Apr 5, 2026
39c3225
Anchor DATE_RANGE policy to latest bookmark instead of wall clock
NateEaton Apr 6, 2026
677691a
feat: add splash screen with system-theme-aware background
NateEaton Apr 6, 2026
d184bcb
Intermediate commit while resolving issues with content sync download…
NateEaton Apr 7, 2026
5689eb1
Fix NEWEST_N offline policy window alignment
NateEaton Apr 7, 2026
8c45bb8
Disable card index overlay
NateEaton Apr 7, 2026
af2912b
Pre-merge cleanup: fix hasOfflinePackage query, extract parseInstantL…
NateEaton Apr 7, 2026
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
62 changes: 0 additions & 62 deletions .github/workflows/build.yml

This file was deleted.

58 changes: 58 additions & 0 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Quality Checks

on:
push:
branches:
- main
- feature/**
- enhancement/**
- fix/**
- chore/**
- claude/**
- codex/**
pull_request:
branches:
- main
workflow_dispatch:

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true'

concurrency:
group: checks-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
verify:
if: >-
github.event_name == 'workflow_dispatch' ||
github.event_name == 'pull_request' ||
github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v5

- name: Setup JDK 17
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 17

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5

- name: Setup Android SDK
uses: android-actions/setup-android@v3

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Assemble Debug Variants
run: ./gradlew :app:assembleDebugAll

- name: Run Lint
run: ./gradlew :app:lintDebugAll

- name: Run Tests
run: ./gradlew :app:testDebugUnitTestAll
28 changes: 0 additions & 28 deletions .github/workflows/run-tests.yml

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,82 +1,126 @@
name: Build Snapshot Release
name: Snapshot Build

on:
push:
branches: [develop]
branches:
- main
- feature/**
- enhancement/**
- fix/**
- chore/**
- claude/**
- codex/**
pull_request:
branches: [main]
workflow_dispatch:

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true'

concurrency:
group: snapshot-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
build:
build-snapshot:
if: >-
github.event_name == 'workflow_dispatch' ||
github.event_name == 'pull_request' ||
github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
permissions:
contents: write
contents: read
steps:
- uses: actions/checkout@v5
- name: Checkout Code
uses: actions/checkout@v5

- name: Setup JDK 17
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 17

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5

- name: Setup Android SDK
uses: android-actions/setup-android@v3

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Decode Keystore
run: |
echo "${{ secrets.SIGNING_KEY }}" | base64 --decode > ${{ github.workspace }}/keystore.jks
- name: Set Env Vars

- name: Set Version Vars
id: set_env
run: |
echo "TIMESTAMP=$(date +%Y%m%dT%H%M%S)" >> "$GITHUB_OUTPUT"
echo "COMMIT_SHA=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
- name: Build apk with Gradle

- name: Build Snapshot Release APK
run: ./gradlew assembleGithubSnapshotRelease
env:
SNAPSHOT_VERSION_NAME: ${{ steps.set_env.outputs.TIMESTAMP }}-${{ steps.set_env.outputs.COMMIT_SHA }}
KEY_ALIAS: ${{ secrets.ALIAS }}
KEYSTORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
KEYSTORE: ${{ github.workspace }}/keystore.jks

- name: Create Checksum
id: create_checksum
run: |
FILENAME=$(echo app/build/outputs/apk/githubSnapshot/release/*.apk)
sha256sum $FILENAME > checksums.txt
echo "ARTIFACT_FILENAME=$FILENAME" >> "$GITHUB_OUTPUT"
- name: Create or update develop-snapshot

# Every run produces a tester-downloadable snapshot artifact.
- name: Upload Snapshot Artifact
uses: actions/upload-artifact@v4
with:
name: tester-snapshot-release
path: |
${{ steps.create_checksum.outputs.ARTIFACT_FILENAME }}
checksums.txt
retention-days: 7

publish-latest-snapshot:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
needs: build-snapshot
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Download Snapshot Artifact
uses: actions/download-artifact@v5
with:
name: tester-snapshot-release
path: ./artifacts

- name: Update Latest Snapshot Release
uses: joutvhu/create-tag@v1
with:
tag_name: develop-snapshot
tag_name: latest-snapshot
tag_sha: ${{ github.sha }}
message: develop-snapshot
message: latest-snapshot
on_tag_exists: update
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create release

- name: Publish to GitHub Releases
uses: ncipollo/release-action@v1.16.0
with:
allowUpdates: true
prerelease: true
name: MyDeck Snapshot Build
name: MyDeck Continuous Snapshot
body: |
This release represents a snapshot build from the `develop` branch. It is **not intended for production use** and may contain unstable features, bugs, or incomplete functionality. This build is released to allow for early testing of the latest changes.
This is an automated snapshot build from the `main` branch. It is a **Release-optimized** build but uses a separate package ID so it can be installed alongside your production version.

This build includes all commits merged into the `develop` branch up to ${{ github.sha }}.

**Thanks for testing!**
**Last updated from:** ${{ github.sha }}
commit: ${{ github.sha }}
tag: develop-snapshot
tag: latest-snapshot
removeArtifacts: true
omitDraftDuringUpdate: true
artifacts: "${{ steps.create_checksum.outputs.ARTIFACT_FILENAME }},checksums.txt"
artifacts: "./artifacts/*.apk,./artifacts/checksums.txt"
token: ${{ secrets.GITHUB_TOKEN }}
- name: Archive APK
uses: actions/upload-artifact@v6
with:
name: dev-release
path: |
${{ steps.create_checksum.outputs.ARTIFACT_FILENAME }}
checksums.txt
63 changes: 0 additions & 63 deletions .github/workflows/test-build.yml

This file was deleted.

3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ local.properties
.attach_pid*
app/backup-icons/
.vscode/
.claude/

# Ignore transient files

Expand All @@ -34,3 +35,5 @@ Thumbs.db

screenshots/
app/githubRelease/

_notes/
11 changes: 8 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,14 @@

This document provides guidelines for AI-assisted development on the MyDeck Android project.

## Usage Efficiency

**Do not run tasks in parallel.** Always execute steps sequentially, one at a time. Usage efficiency is more important than speed — do not use background agents, parallel tool calls, or concurrent subagents to accelerate work.
## Usage Efficiency & Token Conservation

**Strict Anti-Bloat Protocol:**
1. **Sequential Only:** Never run tasks in parallel. Execute steps one at a time.
2. **Scout Before Reading:** Before reading a file, use `grep` or `ls -R` to confirm it contains relevant logic.
3. **File Size Limit:** Do not `cat` or read any file over 30KB without explicit permission. Summarize large files using `grep` or `sed` to extract only relevant functions.
4. **Research Mode Constraint:** In "Plan" or "Research" mode, do not read more than 3 files per turn. Present a summary of findings after every 3 files and wait for user direction.
5. **Memory Management:** If a session involves reading more than 10 files, recommend a "Summary & Reset" where you provide a concise report of findings and ask the user to start a fresh chat to clear the context.

## Localization Requirements

Expand Down
Loading
Loading