unidrive is a multi-platform cloud-sync core (Linux daemon; engine for Windows/Android/Linux UI). See multi-platform.md. Read this before changing anything.
- Smoke tests are the live-integration target (5+5+2=12). Add when coverage gaps emerge. Structural-safety invariants earn their keep; tracking-set lemma is the example. Unit tests with intent. Per-test pruning (ask).
- Doc surface is bounded. Allowed: this file,
README.md,BACKLOG.md,CLOSED.md,BOOSTERS.md, ADRs (docs/adr/), audits (docs/audits/), specs (docs/dev/specs/), plans (docs/dev/plans/), per-moduleREADME.md. Closing BACKLOG entry cites spec path. - No IDs, dates, or version numbers in commits, filenames, or docs.
- Abstractions earn their keep. Need named justification (platform-surface need or structural-safety property) + one consumer. Don't preemptively factor; don't refuse on principle. Tracking-set is the explicit exception.
- No CI policing.
./gradlew checkis the gate. Exception: security scanning (CodeQL) may run on push/PR/schedule, but stays advisory — it MUST NOT be a required merge check;./gradlew checkremains the sole gate. - Never hot-swap a
.jaron a running JVM. Stop daemon first.
- Read github issues
- Read three nearby source files before writing.
- Make change. Run
./gradlew check. Iterate. - One commit, one item.
- Verify load-bearing claims with full pass, not summaries.
- Red flags → re-verify whole artifact, not just called-out line.
core/providers/{internxt,onedrive}/— cloud clientscore/app/{core,sync,sync-tracking,cli,config}/— engine modulesdocs/audits/— Internxt notesdocs/adr/— architectural decisions
Future platforms consume core from outside core/.
cd core && ./gradlew check # the only gate
cd core && ./gradlew :app:cli:shadowJar
bash dist/install.sh
systemctl --user enable --now unidrive.service
journalctl --user -u unidrive.service -fDaemon log: ~/.local/share/unidrive/unidrive.log. Triage: scripts/dev/log-watch.sh --summary.
Live-integration tests need UNIDRIVE_INTEGRATION_TESTS=true + UNIDRIVE_TEST_ACCESS_TOKEN. Template: LiveGraphIntegrationTest.
- Full restarts required.
/exitdoesn't reload registry. - Claude Code / Desktop have separate config locations.
- Conventional Commits style.
- One BACKLOG per commit; BACKLOG→CLOSED same commit.
- No
UD-###references. - Stage hunks explicitly (
git add -p) for mixed concerns.
File future-only constraints in BACKLOG.md Design constraints: rule, file:line, trigger.
- Don't grow daemon to host UI. Platforms are separate apps.
- Don't put UI strings, platform APIs, or user interaction in engine code.
- Don't rename files to add dates/IDs/versions.
- Don't add docstrings/KDoc where none exist.
- Don't combine core + platform work in same PR.
- Ask before deleting unfamiliar files.
If it isn't in github issues, it isn't going to happen. Add it or drop it.