Architecture
Components
| Component | Binary | Role |
|---|---|---|
Library ( |
— |
Paths, SQLite schema, forge SDL profiles, sync engine, monitor store, IPC helpers |
CLI |
|
Sync/list/monitor + ProHelp intercept ( |
GUI |
|
DlangUI offline browser |
Daemon |
|
Poll monitored repos; localhost HTTP JSON IPC ( |
Tray |
|
Win32 tray client for the daemon (Qt wrapper planned for settings) |
Storage
Central root (not inside each project clone):
<archive-root>/index/index.sqlite # lightweight cross-repo index (default) <archive-root>/archives/<host>/<owner>/<repo>/database.sqlite # opt-in full backup <archive-root>/archives/<host>/<owner>/<repo>/contents/ # reserved <archive-root>/monitor.sdl # backup=true|false per repo <archive-root>/pending-open.json # open-repo IPC/GUI handoff
Legacy paths (<repo>/.issues/database.sqlite and parent/.issues/<name>.sqlite) migrate on backup sync.
Existing archive DBs are treated as backup=true on upgrade.
Schema highlights
-
issueswithis_pr,updated_at -
pull_requests+issue_pr_links -
discussions/discussion_comments -
sync_metawatermarks:issues_updated_at,prs_updated_at,discussions_cursor
Forge profiles (SDL)
profiles/forge-profiles.sdl declares matchers, CLI tool, list commands, GraphQL flag, and rate limits.
Shared schema also lands in dlang-supplemental/repo-get (getForge).
Related project gaps
-
AMDphreak/ver— no CI/releases; multi-VCS UX mostly stubs — not a dependency -
dev-centr/rules-manager— IPC pattern reused; Electron tray not adopted; no published releases -
dlang-supplemental/dqt(git dep, pinned commit) —QSystemTrayIconfor the tray app; upstream PR pending ontim-dlang/dqt -
repo-get(DUB~>0.3.0) — forge profile schema (getForge/forge-profiles.sdl) -
repo-get— Linux release artifacts only; forge profiles added for metadata tooling