6cff4a903643e23f5e4bcb92dbed8aa5311fd53f
ROOT CAUSE (confirmed by instrumentation): 1. viewportHeight was 0 — background GeometryReader onAppear fired before ScrollView layout, never updated. Visibility ratio was always 0.00, so wasVisible was never populated. 2. cumulativeDown was 0 — PreferenceKey + onPreferenceChange on the zero-height anchor never delivered scroll offset updates. 3. Both tracking mechanisms were dead. Only per-row onChange fired. FIX: Removed dead PreferenceKey scroll tracker and dead viewport background GeometryReader. All tracking now lives in the per-row GeometryReader onChange(of: frame.minY), which the logs confirmed fires reliably: - Scroll direction: computed from delta between current and previous minY for each entry (stored in lastKnownMinY dictionary) - Cumulative scroll: accumulated from positive deltas (>2pt filter) - Activation: requires cumulative downward scroll > threshold - Visibility: computed using UIScreen.main.bounds.height (reliable, doesn't depend on layout timing) - Mark condition: trackingActive + moving down + unread + was visible + maxY < 0 (fully above viewport) Navigation protection preserved: onAppear resets trackingActive, cumulativeDown, and lastKnownMinY. Removed debug instrumentation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Gitea CI Workflows
security.yml
Runs on push/PR to master. Three jobs:
- dependency-audit —
npm audit --audit-level=highfor budget and frontend - secret-scanning — checks for tracked .env/.db files and hardcoded secret patterns
- dockerfile-lint — verifies all Dockerfiles have
USER(non-root) andHEALTHCHECK
Runner Setup
The runner is configured in the Gitea docker-compose at /media/yusiboyz/Media/Scripts/gitea/docker-compose.yml.
What was done:
- Added
[actions] ENABLED = trueto Gitea'sapp.ini - Added
runnerservice (gitea/act_runner) to Gitea's docker-compose - Generated runner token via
docker exec -u git gitea gitea actions generate-runner-token - Token stored in
/media/yusiboyz/Media/Scripts/gitea/.envasRUNNER_TOKEN - Runner registered as
platform-runnerwith labels: ubuntu-latest, ubuntu-24.04, ubuntu-22.04
To regenerate token (if needed):
cd /media/yusiboyz/Media/Scripts/gitea
docker exec -u git gitea gitea actions generate-runner-token
# Update .env with new RUNNER_TOKEN value
docker compose up -d runner
To check runner status:
docker logs gitea-runner
Description
Languages
Svelte
51.2%
Python
24.2%
Swift
13.5%
JavaScript
5.4%
TypeScript
3.3%
Other
2.4%