Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
336 commits
Select commit Hold shift + click to select a range
957bdd6
docs(qa): D11 fixed (pre-stream classify is abortable)
alichherawalla Jul 15, 2026
19b76fd
fix(models): "Configure for me" activates TTS (voice/speech key unifi…
alichherawalla Jul 15, 2026
fe62b63
docs(qa): D26 fixed (Configure-for-me activates TTS)
alichherawalla Jul 15, 2026
94ddc61
fix(models): verify a download before marking it installed (D2)
alichherawalla Jul 15, 2026
6c86278
docs(qa): D2 fixed (download integrity gate before install)
alichherawalla Jul 15, 2026
84fe224
fix(models): guard against a re-entrant same-id download (D3)
alichherawalla Jul 15, 2026
92199c0
docs(qa): D3 fixed (re-entrant download guard)
alichherawalla Jul 15, 2026
1b54bab
chore(chat): a11y label on Stop button; D7 + D13 dismissed as not-bugs
alichherawalla Jul 15, 2026
48cca63
fix(models): deleting the active image model clears its selection (D6)
alichherawalla Jul 15, 2026
730ae0e
docs(qa): D6 fixed (clear active image model on delete)
alichherawalla Jul 15, 2026
e1ff064
docs(qa): D5 benign (React 19 no-op), D14 needs runtime repro — hones…
alichherawalla Jul 15, 2026
112cb73
fix(chat): deleting a conversation removes its messages + artifacts (…
alichherawalla Jul 15, 2026
2735d33
docs(qa): D23 fixed (conversation delete cascades messages + artifacts)
alichherawalla Jul 15, 2026
b3934d7
fix(chat): keep the text answer when a tool turn's image gen is cance…
alichherawalla Jul 15, 2026
195d1bf
docs(qa): D12 fixed (tool-image cancel keeps text answer)
alichherawalla Jul 15, 2026
9aae8d1
docs(qa): D27 dismissed — already fixed by T1b (atomic per-model over…
alichherawalla Jul 15, 2026
52a5114
fix(chat): lock a send's project attribution at send-time (D21)
alichherawalla Jul 15, 2026
1d7011e
docs(qa): D21 fixed (project attribution locked at send-time)
alichherawalla Jul 15, 2026
e8661b0
docs(qa): D24 dismissed (router remounts, no drift); D22 confirmed de…
alichherawalla Jul 15, 2026
d74a9ab
refactor(rag): remove the dead project_threads chat backend (D22)
alichherawalla Jul 15, 2026
2f47a85
docs(qa): D22 fixed (dead project_threads backend removed, build-veri…
alichherawalla Jul 15, 2026
3a36cdb
docs(qa): D31 confirmed (open-core violation) — scoped with dual-buil…
alichherawalla Jul 15, 2026
f11a921
fix(settings): optimistic toggles revert if the persist fails (D34)
alichherawalla Jul 15, 2026
9a31c65
docs(qa): D34 fixed (toggles revert on persist failure)
alichherawalla Jul 15, 2026
8539c20
test(rag): lock getRagConversations scope tri-state (D25)
alichherawalla Jul 15, 2026
bebd230
docs(qa): D25 contract locked (getRagConversations tri-state test)
alichherawalla Jul 15, 2026
ebfd30d
docs(qa): D19 (minor/self-recovering) + D32 (missing-feature, needs p…
alichherawalla Jul 15, 2026
8e0acd2
docs(qa): D35 assessed (low-severity race) — deferred with before/aft…
alichherawalla Jul 15, 2026
5815c8e
Merge branch 'feat/windows-support' into chore/quality-hardening
alichherawalla Jul 15, 2026
e793b0c
feat(pro/win): pro-availability decision + expose renderer platform
alichherawalla Jul 15, 2026
3844333
feat(pro/win): nav + view-router show 'coming soon' on Windows
alichherawalla Jul 15, 2026
dd533fc
feat(pro/win): Settings pro sections show 'coming soon' on Windows
alichherawalla Jul 15, 2026
2926ae5
feat(pro/win): gate pro main activation off on Windows
alichherawalla Jul 15, 2026
cc8cdb9
docs(win): record Pro 'coming soon' behavior + on-device Windows/macO…
alichherawalla Jul 15, 2026
5b97bd4
test(pro/win): drop unused Proxy args in Settings coming-soon test (l…
alichherawalla Jul 15, 2026
950f21d
Revert the Windows Pro "coming soon" changes
alichherawalla Jul 15, 2026
82e0880
refactor(open-core D31): pro Settings sections render via the registr…
alichherawalla Jul 15, 2026
5588f06
refactor(settings): extract SettingsCard/ProPlaceholder to their own …
alichherawalla Jul 15, 2026
d962972
fix(review): address live PR #46 findings
alichherawalla Jul 15, 2026
71512ae
test(tools): REAL agentic-loop integration over a fake llama socket (…
alichherawalla Jul 15, 2026
018afea
docs(roadmap): add screen-aware dictation todo (active-window OCR → d…
alichherawalla Jul 15, 2026
d627985
refactor(win): one cross-platform orphan-port reaper; add Windows bra…
alichherawalla Jul 15, 2026
f0edc10
test(coverage): exclude kill-orphan-port.ts (OS-boundary subprocess s…
alichherawalla Jul 15, 2026
2c601b5
test(tools): port the tool-loop suite to REAL integration (kill the l…
alichherawalla Jul 15, 2026
605eb81
docs+test: honest note on the search_memory test-conversion gap (scop…
alichherawalla Jul 15, 2026
142264c
test(search): search_memory citations are now a REAL integration test…
alichherawalla Jul 15, 2026
9fb34b9
test(tools): abort (D15) + vision guard (D16) now REAL; delete the la…
alichherawalla Jul 15, 2026
75f848d
test(harness): fake llama-server serves non-streaming llm.chat too
alichherawalla Jul 15, 2026
664f155
feat(settings): add the 'capture' pro Settings slot (restart/resume c…
alichherawalla Jul 15, 2026
9a033a9
test(audio): gate the round-trip on real audio capability, not just g…
alichherawalla Jul 15, 2026
c115b9d
fix(llm): honor an already-aborted signal at streamCompletion entry (…
alichherawalla Jul 15, 2026
30c999a
test(win): pin the netstat PID parser for IPv6 listener rows (orphan-…
alichherawalla Jul 15, 2026
8b8cf63
fix(tts): drop the asar-file cwd that killed voice in every packaged …
alichherawalla Jul 15, 2026
376353e
fix(imagegen): surface sd-server stderr when it dies mid-job (no opaq…
alichherawalla Jul 16, 2026
5c7be8c
test(release): packaged smoke gate — launch the real .app and prove e…
alichherawalla Jul 16, 2026
5568da4
fix(security): clear SonarCloud new-code vulns + reliability bugs (PR…
alichherawalla Jul 16, 2026
fb814cf
ci: harden pro checkout — no persisted PAT + fail loudly if pro is mi…
alichherawalla Jul 16, 2026
eaef060
fix(security): satisfy the last 4 SonarCloud new-code vulns on #46 (r…
alichherawalla Jul 16, 2026
1bc8d7d
style: adopt prettier repo-wide (the deferred hygiene reformat)
alichherawalla Jul 16, 2026
40f4659
chore(lint): adopt the gold-standard eslint rules as a warn ratchet (…
alichherawalla Jul 16, 2026
919b066
docs(hygiene): mark the gold-standard adoption as landed (was 'pendin…
alichherawalla Jul 16, 2026
42bf45a
chore(tooling): scope quality gates to owned source
alichherawalla Jul 16, 2026
39d96fe
refactor(models): clear renderer hook and lint violations
alichherawalla Jul 16, 2026
ab7a31c
test(models): exercise active model storage without mocks
alichherawalla Jul 16, 2026
d822694
test(settings): replace database mocks with SQLite coverage
alichherawalla Jul 16, 2026
00930f8
test(pro): isolate activation policy from loader IO
alichherawalla Jul 16, 2026
e1a1b85
test(mcp): exercise connector tools over real state
alichherawalla Jul 16, 2026
510841c
refactor(settings): share SQLite persistence seam
alichherawalla Jul 16, 2026
b34dd8b
refactor(settings): centralize app settings schema
alichherawalla Jul 16, 2026
65c793e
test(identity): classify settings composition shell
alichherawalla Jul 16, 2026
650fcee
docs(qa): add desktop release test matrix
alichherawalla Jul 16, 2026
a89c922
chore(lint): clear core source errors
alichherawalla Jul 16, 2026
8d3ec3c
build(packages): restore reproducible package builds
alichherawalla Jul 16, 2026
516d8d2
refactor(runtime): replace lazy CommonJS imports
alichherawalla Jul 16, 2026
e3d8d23
fix(rag): type lazy PDF parser loading
alichherawalla Jul 16, 2026
23e00e4
refactor(preload): type IPC event payloads
alichherawalla Jul 17, 2026
782d971
refactor(ipc): centralize shared boundary contracts
alichherawalla Jul 17, 2026
3faf845
test(ipc): guard shared contract ownership
alichherawalla Jul 17, 2026
a958c47
refactor(preload): derive renderer API from implementation
alichherawalla Jul 17, 2026
e1fdaf1
merge: integrate Windows support from main
alichherawalla Jul 17, 2026
3d1a7b0
fix(renderer): preserve missing-preload platform fallback
alichherawalla Jul 17, 2026
ceb22e9
docs(qa): track P0-P2 integration coverage
alichherawalla Jul 17, 2026
8a8289d
fix(privacy): erase project metadata on full delete
alichherawalla Jul 17, 2026
44dbcb3
test(privacy): verify full wipe across core and Pro
alichherawalla Jul 17, 2026
56b75ea
test(privacy): prove category deletion stays scoped
alichherawalla Jul 17, 2026
93ef4fc
test(e2e): isolate fresh-install journeys
alichherawalla Jul 17, 2026
a1a08a0
test(e2e): cover every locked Pro route
alichherawalla Jul 17, 2026
5a6ac95
docs(qa): correct integration gate totals
alichherawalla Jul 17, 2026
3ccc09d
test(clipboard): cover text capture and restore
alichherawalla Jul 17, 2026
eb663a9
test(clipboard): cover image and file capture
alichherawalla Jul 17, 2026
530e229
test(vault): cover copy actions end to end
alichherawalla Jul 17, 2026
7109aad
test(chat): verify persistence across relaunch
alichherawalla Jul 17, 2026
0ee031c
test(resilience): verify cold recovery after forced quit
alichherawalla Jul 17, 2026
3857b68
test(gateway): verify models endpoint contract
alichherawalla Jul 17, 2026
f009f28
fix(health): report live modality readiness
alichherawalla Jul 17, 2026
45cde09
test(settings): verify residency across relaunch
alichherawalla Jul 17, 2026
d771fc0
test(models): reject truncated GGUF ingress
alichherawalla Jul 17, 2026
0103294
test(settings): verify resource mode application
alichherawalla Jul 17, 2026
6fcd597
docs(qa): record seam integration coverage
alichherawalla Jul 17, 2026
eab2228
test(models): contain disk write failures
alichherawalla Jul 17, 2026
76737ec
test(rag): reject damaged documents atomically
alichherawalla Jul 17, 2026
5d4e031
test(connectors): bound dead tool discovery
alichherawalla Jul 17, 2026
1f7598d
docs(qa): record connector and privacy seams
alichherawalla Jul 17, 2026
a39d0cf
test(rag): cover knowledge document ingestion
alichherawalla Jul 17, 2026
ccd0cce
fix(connectors): remove owned secrets on delete
alichherawalla Jul 17, 2026
5de9ce2
test(models): recover interrupted downloads
alichherawalla Jul 17, 2026
ecb5ca1
test(qa): validate coverage ledger priorities
alichherawalla Jul 17, 2026
3547c0d
fix(models): surface offline download failures
alichherawalla Jul 17, 2026
dbe3272
test(rag): enforce project-scoped grounding
alichherawalla Jul 17, 2026
3995bf2
docs(qa): record grounded privacy seams
alichherawalla Jul 17, 2026
b9302d4
test(gateway): verify live chat streaming
alichherawalla Jul 17, 2026
feb53b1
test(models): clear deleted active selections
alichherawalla Jul 17, 2026
232e823
test(chat): preserve project inheritance
alichherawalla Jul 17, 2026
593f5b0
test(chat): degrade safely without memory
alichherawalla Jul 17, 2026
db58fdf
fix(tools): replace dynamic calculator evaluation
alichherawalla Jul 17, 2026
120abad
fix(projects): use opaque secure identifiers
alichherawalla Jul 17, 2026
704b75d
fix(toasts): use secure transient identifiers
alichherawalla Jul 17, 2026
551bb40
refactor(parsers): share tagged chat state machine
alichherawalla Jul 17, 2026
aea260c
fix(scripts): keep diagnostics free of external data
alichherawalla Jul 17, 2026
3bd4f0b
fix(security): validate owned paths and proxy responses
alichherawalla Jul 17, 2026
a20b7b2
fix(runtimes): make pending work guards explicit
alichherawalla Jul 17, 2026
2cfc094
fix(chat): harden clipboard and preview interactions
alichherawalla Jul 17, 2026
3850ebb
fix(models): format structured download failures
alichherawalla Jul 17, 2026
7286a61
fix(setup): handle asynchronous failures
alichherawalla Jul 17, 2026
0e5946c
chore(imports): use explicit node modules
alichherawalla Jul 17, 2026
9a205f0
fix(calculator): preserve exponentiation
alichherawalla Jul 17, 2026
c7ddcc5
fix(capture): reject cross-drive path escapes
alichherawalla Jul 17, 2026
09bf6e3
fix(chat): report clipboard success truthfully
alichherawalla Jul 17, 2026
b920386
test(gateway): stabilize invalid input failures
alichherawalla Jul 17, 2026
7238b13
fix(security): isolate executable artifact previews
alichherawalla Jul 17, 2026
3590d34
test(chat): verify lifecycle isolation
alichherawalla Jul 17, 2026
ecc6399
test(settings): verify relaunch persistence
alichherawalla Jul 17, 2026
67b68ce
test(models): verify active selections survive relaunch
alichherawalla Jul 17, 2026
4fe8a1c
docs(tests): update P0-P2 coverage snapshot
alichherawalla Jul 17, 2026
d25f04d
test(projects): verify edits survive relaunch
alichherawalla Jul 17, 2026
d373227
test(artifacts): verify persisted content reopens
alichherawalla Jul 17, 2026
1a396d8
docs(tests): record project artifact coverage
alichherawalla Jul 17, 2026
c0d13ae
test(gateway): verify image generation route
alichherawalla Jul 17, 2026
dea2ec2
docs(tests): record gateway image coverage
alichherawalla Jul 17, 2026
e86f783
refactor(toasts): keep request type private
alichherawalla Jul 17, 2026
d52ab4e
test(chat): verify reply actions recover cleanly
alichherawalla Jul 17, 2026
7c4ebb7
docs(tests): record chat action coverage
alichherawalla Jul 17, 2026
882fe9f
test(image): verify runtime eviction recovery
alichherawalla Jul 17, 2026
ee2bc1c
docs(tests): record image runtime recovery
alichherawalla Jul 17, 2026
0dfd36f
docs(tests): record unified search coverage
alichherawalla Jul 17, 2026
4403380
test(models): verify download readiness matrix
alichherawalla Jul 17, 2026
0bd1a90
test(tts): verify downloaded voice model speaks
alichherawalla Jul 17, 2026
ed45537
docs(tests): record model download coverage
alichherawalla Jul 17, 2026
27a3eff
fix(llm): recover replacement process crashes
alichherawalla Jul 17, 2026
b0b01d2
docs(tests): record engine recovery coverage
alichherawalla Jul 17, 2026
f64d409
docs(tests): record meeting lifecycle coverage
alichherawalla Jul 17, 2026
2965c20
test(updates): verify manual check outcomes
alichherawalla Jul 17, 2026
25d7e2f
docs(tests): record licensing update coverage
alichherawalla Jul 17, 2026
aba8fa0
test(images): verify generation and vision journeys
alichherawalla Jul 17, 2026
31a4da2
docs(tests): record image and replay coverage
alichherawalla Jul 17, 2026
d1995e3
test(chat): verify first reply and no-memory scope
alichherawalla Jul 17, 2026
3e8bdcd
docs(tests): record core chat coverage
alichherawalla Jul 17, 2026
8c191b2
test(storage): verify usage accounting
alichherawalla Jul 17, 2026
bc1ee1c
test(links): verify external browser routing
alichherawalla Jul 17, 2026
98ed3cc
test(chat): verify seeded all-memory retrieval
alichherawalla Jul 17, 2026
a3c1fda
docs(tests): record memory entity and storage coverage
alichherawalla Jul 17, 2026
dbe03eb
fix(identity): use canonical desktop product name
alichherawalla Jul 17, 2026
037fbb2
test(identity): verify built window name
alichherawalla Jul 17, 2026
dfa8b1f
docs(tests): record desktop identity coverage
alichherawalla Jul 17, 2026
9596c05
test(setup): verify baseline and engine health journeys
alichherawalla Jul 17, 2026
5468fe6
fix(tts): speak rendered reply text
alichherawalla Jul 17, 2026
99ba69d
fix(voice): release playback and microphone resources
alichherawalla Jul 17, 2026
2ada697
fix(navigation): preserve selected project history
alichherawalla Jul 17, 2026
28b8240
test(connectors): verify reachable setup flow
alichherawalla Jul 17, 2026
dce21b1
fix(accessibility): preserve focus motion and escape behavior
alichherawalla Jul 17, 2026
81a1f5c
test(packaging): verify bundle and llama gates
alichherawalla Jul 17, 2026
1408ff7
test(artifacts): contain exhausted filesystem writes
alichherawalla Jul 17, 2026
e590698
test(startup): verify single-instance ownership
alichherawalla Jul 17, 2026
051d61d
test(chat): verify thinking stream separation
alichherawalla Jul 17, 2026
23d9def
docs(tests): reconcile P0-P2 evidence
alichherawalla Jul 17, 2026
79a862a
test(navigation): verify new-chat shortcut
alichherawalla Jul 17, 2026
204c62d
Revert "test(navigation): verify new-chat shortcut"
alichherawalla Jul 17, 2026
3d264a9
test(projects): verify dense desktop layout
alichherawalla Jul 17, 2026
c3957af
test(desktop): verify keyboard focus journey
alichherawalla Jul 17, 2026
5d46848
fix(imagegen): preserve tool text across cancellation
alichherawalla Jul 17, 2026
276135a
fix(dictation): keep delivery errors visible
alichherawalla Jul 17, 2026
59d248f
docs(tests): record connected release journeys
alichherawalla Jul 17, 2026
381ca14
test(replay): verify chronological capture playback
alichherawalla Jul 17, 2026
bf713b7
test(tts): connect Speak action to local audio
alichherawalla Jul 17, 2026
de4f29d
test(connectors): verify real reachable setup
alichherawalla Jul 17, 2026
70420ff
docs(tests): record connector replay and TTS coverage
alichherawalla Jul 17, 2026
762b76a
test(models): verify concurrent download isolation
alichherawalla Jul 17, 2026
0908869
test(replay): preserve search result target
alichherawalla Jul 17, 2026
cb55907
test(models): label concurrent download coverage honestly
alichherawalla Jul 17, 2026
ee03e6b
test(chat): verify large collection usability
alichherawalla Jul 17, 2026
9be2df1
test(image): verify composer settings boundary
alichherawalla Jul 17, 2026
edc0574
docs(tests): record replay targeting and load coverage
alichherawalla Jul 17, 2026
3a5dacf
test(onboarding): verify manual model setup
alichherawalla Jul 17, 2026
f61421f
docs(tests): record manual onboarding coverage
alichherawalla Jul 17, 2026
a853f41
test(offline): guard local core workflows
alichherawalla Jul 17, 2026
4d36a46
test(onboarding): verify interrupted setup recovery
alichherawalla Jul 17, 2026
f302199
test(packaging): make build timeout enforceable
alichherawalla Jul 17, 2026
488abc8
docs(tests): record offline workflow coverage
alichherawalla Jul 17, 2026
54cb9d7
test(storage): verify low-disk containment
alichherawalla Jul 17, 2026
fe22082
fix(models): preserve live port owner
alichherawalla Jul 17, 2026
8eb65e0
test(storage): keep renderer seam process-safe
alichherawalla Jul 17, 2026
d1a567c
docs(tests): record model port ownership coverage
alichherawalla Jul 17, 2026
ba1b54e
test(image): recover after RAM guard refusal
alichherawalla Jul 17, 2026
01abb0a
test(image): show RAM guard recovery
alichherawalla Jul 17, 2026
b48fac9
test(updates): verify manual check states
alichherawalla Jul 17, 2026
8068044
docs(tests): record manual update coverage
alichherawalla Jul 17, 2026
1fe84bd
test(chat): prove raised response limit path
alichherawalla Jul 17, 2026
f2bd854
test(permissions): verify denied state recovery
alichherawalla Jul 17, 2026
d5ff57b
test(renderer): stabilize instrumented UI journeys
alichherawalla Jul 17, 2026
f2d3cb2
fix(models): reclaim partial on disk exhaustion
alichherawalla Jul 17, 2026
7933f96
fix(artifacts): make record writes atomic
alichherawalla Jul 17, 2026
1dbba1d
feat(storage): clear only ephemeral cache
alichherawalla Jul 17, 2026
6f05dcf
fix(evidence): isolate screenshot profiles
alichherawalla Jul 17, 2026
182600b
test(permissions): verify macOS admission seams
alichherawalla Jul 17, 2026
d746745
test(packaging): verify packaged helper payload
alichherawalla Jul 17, 2026
a95ef1d
test(packaging): verify exact llama artifact closure
alichherawalla Jul 17, 2026
c2c9497
docs(tests): record P0 integration coverage
alichherawalla Jul 17, 2026
07c7ecf
test: verify installed DMG launch path
alichherawalla Jul 17, 2026
bdee173
test: isolate DMG launch smoke profile
alichherawalla Jul 17, 2026
82cbe40
docs(tests): keep coverage snapshot machine-readable
alichherawalla Jul 17, 2026
6af6ba8
test(ocr): bound native helper under suite load
alichherawalla Jul 17, 2026
4b259d2
test(navigation): flush shortcut transitions
alichherawalla Jul 17, 2026
296be3e
build: exclude local profiles from app bundle
alichherawalla Jul 17, 2026
4281b1a
fix(onboarding): resume intro after relaunch
alichherawalla Jul 17, 2026
01afe48
fix(models): queue concurrent downloads
alichherawalla Jul 17, 2026
79a88c3
fix(permissions): recover from microphone denial
alichherawalla Jul 17, 2026
fc5620c
fix(onboarding): keep all capability icons visible
alichherawalla Jul 17, 2026
e91695a
fix(chat): surface response cutoff state
alichherawalla Jul 17, 2026
9346a2f
feat(image): persist generation controls and metadata
alichherawalla Jul 17, 2026
171b7ef
feat(image): gate unsafe memory override explicitly
alichherawalla Jul 17, 2026
aa871c6
fix(chat): persist conversation renames
alichherawalla Jul 17, 2026
12b35b7
fix(replay): serve media through real loopback HTTP
alichherawalla Jul 17, 2026
95f0b7c
fix(image): retry memory refusal only by consent
alichherawalla Jul 17, 2026
e471575
docs: record newly covered release journeys
alichherawalla Jul 17, 2026
c71acdd
fix(day): route exact linked records
alichherawalla Jul 17, 2026
b8bb3ac
refactor(entities): centralize admission and lifecycle
alichherawalla Jul 17, 2026
c78980e
docs: mark exact day targets covered
alichherawalla Jul 17, 2026
57f12cd
feat(notifications): preserve exact target routing
alichherawalla Jul 17, 2026
aec12af
docs: mark notification targets covered
alichherawalla Jul 17, 2026
189a6fb
docs: complete automated release coverage
alichherawalla Jul 17, 2026
cc901b1
test(contracts): decouple semantic guards from formatting
alichherawalla Jul 17, 2026
68c19fd
chore: make dead-code gate actionable
alichherawalla Jul 17, 2026
5e6576d
test(renderer): centralize browser observer boundary
alichherawalla Jul 17, 2026
e947d0d
test(packaging): reject incomplete macOS artifacts
alichherawalla Jul 17, 2026
9d28298
fix(database): reopen closed shared handle
alichherawalla Jul 17, 2026
d3bdb1f
test(database): run native journeys serially
alichherawalla Jul 17, 2026
2da9be1
fix(packaging): allocate deterministic DMG capacity
alichherawalla Jul 17, 2026
5567d2f
fix(packaging): require signatures only for release builds
alichherawalla Jul 17, 2026
c452eed
fix(packaging): exclude ephemeral coverage output
alichherawalla Jul 17, 2026
755f23b
test(modal): await nested exit animation
alichherawalla Jul 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .agent/rules/working-style.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
trigger: always_on
---

we don't need backward compatability for now
we don't need backward compatability for now
122 changes: 122 additions & 0 deletions .dependency-cruiser.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
// Architecture-boundary + hygiene gate (hygiene §A separation-of-concerns + §H
// open-core). dependency-cruiser walks the IMPORT GRAPH and fails the build on a
// forbidden edge. Runs FREE + local (no hosted service), so it enforces structure
// on core here without exposing anything. (Duplication / smells / coverage are
// SonarCloud's axis — content, not edges.)
//
// Deliberately AGGRESSIVE: broken imports, phantom/dev deps, circular deps, dead
// modules, and the layer/open-core boundaries all gate. All error-level rules are
// verified clean on the current tree (0 errors); no-orphans is warn (surfaces dead
// code without blocking). Run: `npm run depcruise`.
module.exports = {
forbidden: [
// --- structural bug-catchers ------------------------------------------------
{
name: 'not-to-unresolvable',
comment: 'A broken/typo/moved import must fail the build, not surface at runtime.',
severity: 'error',
from: {},
to: { couldNotResolve: true }
},
{
name: 'no-circular',
comment:
'Circular imports make load order fragile and break tree-shaking. Extract the shared piece.',
severity: 'error',
from: {},
to: { circular: true }
},
{
name: 'not-to-dev-dep',
comment:
'Shipping code must not import a devDependency — it would be missing in the packaged app.',
severity: 'error',
from: { path: '^src', pathNot: '\\.(test|spec)\\.(ts|tsx)$|__tests__|\\.config\\.' },
to: {
dependencyTypes: ['npm-dev'],
pathNot: 'node_modules/(vitest|@vitest|@testing-library)'
}
},
{
name: 'no-non-package-json',
comment:
'A dependency not declared in package.json (a phantom dep) — install it or fix the import.',
severity: 'error',
from: { path: '^src' },
to: { dependencyTypes: ['npm-no-pkg', 'npm-unknown'] }
},
{
name: 'no-deprecated-core',
comment: 'Deprecated Node core module.',
severity: 'error',
from: {},
to: { dependencyTypes: ['core'], path: '^(punycode|domain|sys|_linklist|constants)$' }
},
{
name: 'no-orphans',
comment: 'Dead module — nothing imports it. Delete it or wire it up.',
severity: 'warn',
from: {
orphan: true,
pathNot:
'\\.d\\.ts$|\\.(test|spec)\\.(ts|tsx)$|__tests__|(^|/)(tsconfig|vitest|eslint|playwright)\\.|\\.config\\.|bootstrap/proStub|main\\.tsx$|src/preload/'
},
to: {}
},
// --- the boundary rules (hygiene §A / §H) -----------------------------------
{
name: 'open-core-boundary',
comment:
'Open core (§H): core (public, AGPL) must NEVER import pro source. Only the loader seams cross ' +
'the boundary. A stray core->pro import ships paid source in the public repo.',
severity: 'error',
from: {
pathNot: '(loadProFeaturesMain|loadProFeaturesRenderer|main\\.tsx|bootstrap/proStub)'
},
to: { path: 'bootstrap/proStub\\.ts$|(^|/)pro/(main|renderer)/' }
},
{
name: 'pure-stays-pure',
comment:
'Isolate pure logic from I/O (§A). These extracted decision modules are unit-tested BECAUSE they ' +
'import no Electron/DB/network; an accidental IO import breaks testability AND silently grows the ' +
'coverage-excluded shell while coverage still looks green.',
severity: 'error',
from: {
path: 'src/main/(search-ranking|ipc-query-logic|model-sizing|files-classify|tts-logic|vectors-predicates|skills-parse|tools-parsers|mime|models/gguf)\\.ts$'
},
to: {
path: '(^|/)node_modules/electron|src/main/(database|vectors|llm|mcp|embeddings|search)\\.ts$'
}
},
{
name: 'renderer-not-to-main',
comment:
'The renderer talks to main ONLY through the preload IPC bridge, never by importing main modules.',
severity: 'error',
from: { path: '^src/renderer' },
to: { path: '^src/main' }
},
{
name: 'not-to-test',
comment:
'Production code must not import test files (they would ship, dragging fixtures in).',
severity: 'error',
from: { pathNot: '\\.(test|spec)\\.(ts|tsx)$|__tests__' },
to: { path: '\\.(test|spec)\\.(ts|tsx)$|__tests__/' }
}
],
options: {
doNotFollow: { path: 'node_modules' },
tsConfig: { fileName: 'tsconfig.web.json' },
exclude: { path: 'node_modules|e2e/' },
tsPreCompilationDeps: true,
// Follow package "exports" subpaths (e.g. @modelcontextprotocol/sdk/client/*.js)
// so real imports resolve and not-to-unresolvable doesn't false-positive on them.
enhancedResolveOptions: {
exportsFields: ['exports'],
conditionNames: ['import', 'require', 'node', 'default', 'types'],
mainFields: ['module', 'main', 'types']
}
}
}
Loading
Loading