Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1214 commits
Select commit Hold shift + click to select a range
170a197
fix(deploy): locate aspire CLI on Git Bash (Windows)
rbuergi May 21, 2026
b1522f3
fix(thread-exec): cache-routed _Exec streaming + failure rollback + d…
rbuergi May 21, 2026
e8c463c
feat(chat-gui): Claude-Code-style user vs assistant visual differenti…
rbuergi May 21, 2026
08e4c48
fix(thread-exec): cache-routed handle + dedupe ToolCallEntry by CallId
rbuergi May 21, 2026
59d34b1
fix(stream): direct-route MeshNodeStreamHandle reads/writes — no cach…
rbuergi May 22, 2026
bfa088c
Revert "fix(stream): direct-route MeshNodeStreamHandle reads/writes —…
rbuergi May 22, 2026
31325da
diag(layout-area): trace AccessContext capture + restore for User das…
rbuergi May 22, 2026
a0c1747
fix(sync-stream): preserve real user identity through SubscribeRequest
rbuergi May 22, 2026
ed784e7
fix(synced-query): per-user RLS isolation + System pin for security w…
rbuergi May 22, 2026
42c4b44
fix(query-rls): explicit Anonymous flows through validators
rbuergi May 22, 2026
55ef906
Revert "fix(query-rls): explicit Anonymous flows through validators"
rbuergi May 22, 2026
b00893b
fix(query-identity): stamp circuit AccessContext on MeshQueryRequest …
rbuergi May 22, 2026
e26cc0e
fix(message-hub): universal AccessContext restore at handler entry
rbuergi May 22, 2026
c1e0afb
fix(synced-query): per-subscriber RLS filter instead of per-user cach…
rbuergi May 22, 2026
c4c118f
feat(security): sanctioned cache identity + identity-baton doc + leak…
rbuergi May 22, 2026
9f530a9
fix(access-context): don't propagate hub-shaped principals to AsyncLocal
rbuergi May 22, 2026
ac6d4de
fix(access-context): drop ImpersonateAsHub from sync-protocol + hub-s…
rbuergi May 22, 2026
f1dac05
fix(sync-stream): drop vestigial ImpersonateAsHub on HeartBeatEvent
rbuergi May 22, 2026
a17984e
fix(tests): disable disk compile cache by default for monolith test base
rbuergi May 22, 2026
0c1e048
fix(tests): per-test-class CompilationCache directory + drop IMeshQue…
rbuergi May 22, 2026
0b4f0e2
fix(access-context): explicit Anonymous userId no longer silently upg…
rbuergi May 22, 2026
757d2a2
fix(access-context): stop CarryAccessContext from leaking identity in…
rbuergi May 22, 2026
b0a40c5
fix(access-context): restore AccessControlPipeline.SetContext for in-…
rbuergi May 22, 2026
df12d50
fix(access-context): SetCircuitContext also clears the per-request Co…
rbuergi May 22, 2026
02dbf16
fix(tests+cache): stream-based ReadNodeAsync + cache invalidation on …
rbuergi May 22, 2026
0f48d36
fix(access-control): ResolveIdentity no longer trusts stale AsyncLocal
rbuergi May 22, 2026
ac2f995
fix(access-context): hub disposal on delete + claim-roles from both C…
rbuergi May 22, 2026
55afa2b
fix(thread-stream): monotonic Text guard during Streaming status
rbuergi May 22, 2026
80033f8
feat(chat): inline bubble in ThreadChatView + Modern Chat polish
rbuergi May 22, 2026
67bb678
perf(storage): push select: projection into PG/Cosmos + fix PG Descri…
rbuergi May 23, 2026
0560c34
fix(concurrency): wrap GetOrAdd factories in Lazy<T> to prevent dupli…
rbuergi May 23, 2026
70baeb3
fix(test-readback): race stream + GetMeshNode in ReadNodeAsync for de…
rbuergi May 23, 2026
b91415c
perf(query): kill N+1 duplicate walk when adapter answers scoped quer…
rbuergi May 23, 2026
5a18f5a
fix(tests): HangingStreamCache implements IMeshNodeStreamCache.Invali…
rbuergi May 23, 2026
1973616
perf(query): PostgreSqlMeshQuery self-filters excluded-namespace queries
rbuergi May 23, 2026
f194910
perf(cosmos): CosmosMeshQuery self-filters excluded-namespace queries
rbuergi May 23, 2026
0435c15
fix(tests): SyncedQuery cache-identity asserts the inner observable
rbuergi May 23, 2026
7df3d3c
perf(query): StaticNodeQueryProvider self-filters non-static namespac…
rbuergi May 23, 2026
304a9e0
fix(tests): DataPathTest waits on the condition, not a fixed Task.Delay
rbuergi May 23, 2026
80190f7
fix(tests): replace Task.Delay propagation polls with stream.Where
rbuergi May 23, 2026
0bcd7d8
fix(tests): kill ObserveQuery_EmitsInitialResults flake + stream-base…
rbuergi May 23, 2026
7055bba
docs: stream.Where polling pattern + ban Task.Delay propagation waits
rbuergi May 23, 2026
8c7ef9b
perf(pg): functional LOWER() indexes for case-insensitive equality
rbuergi May 23, 2026
0651069
fix(tests): convert Task.Delay propagation waits to stream.Where + Ti…
rbuergi May 23, 2026
478974c
fix(tests): NavigationProgressTest — convert Task.Delay waits to Stat…
rbuergi May 23, 2026
2c87e3d
fix(tests): FileSystemObservableQueryTests + FileSystemChangeWatcherT…
rbuergi May 23, 2026
f3cae6c
perf(search): wire vector search into PostgreSqlMeshQuery for free-fl…
rbuergi May 23, 2026
0f8397b
fix(tests): ProjectViewsReactiveTests — replace propagation Task.Delay
rbuergi May 23, 2026
c7ecb55
fix(tests): convert more polling loops to stream.Where + Timeout
rbuergi May 23, 2026
613544a
fix(tests): permission/hub-activation polling — stream.Where + Timeout
rbuergi May 23, 2026
11b91c2
feat(threads): fix bubble binding + Done state + Threads menu + notif…
rbuergi May 23, 2026
e8c6e36
fix(tests): convert hand-rolled polling loops and grace-period Task.D…
rbuergi May 23, 2026
39d7575
docs: VectorSearch.md + CLAUDE.md note for the new free-text routing
rbuergi May 23, 2026
50ab596
feat(notifications): V26 migration backfills notifications table + in…
rbuergi May 23, 2026
4f0c226
fix(tests): align AccessContext tests with pass-through semantics
rbuergi May 23, 2026
1fcca4f
fix(tests): align MeshNodeReadAsSystem with cache RLS-gated semantics
rbuergi May 23, 2026
f0d8e9f
fix(tests): bump CreateLayoutArea timeouts from 20s to 60s
rbuergi May 23, 2026
587c7ff
fix(routing): reject NodeType names in PartitionCache probe
rbuergi May 23, 2026
74227bb
fix(tests): clean per-partition schemas in PostgreSqlFixture.CleanDat…
rbuergi May 23, 2026
0c65bde
fix(tests): warmup stream before Submit in CancelStream + SubThreadHa…
rbuergi May 23, 2026
1bc08b6
fix(threads): UpdateThreadPersistentId via stream.Update, not DataCha…
rbuergi May 23, 2026
5973109
fix(tests): SubThreadHangRepro QuiesceTimeout 75s for hung-sub-thread
rbuergi May 23, 2026
7e0ac1a
fix(tests): make 4 CI-flaky tests robust
rbuergi May 23, 2026
e2d3643
fix(tests): Diagnostic_DeleteEmitsRemoved Replay+RefCount, not Publis…
rbuergi May 23, 2026
a7798dd
fix(tests): streaming-emissions filter accepts Completed status too
rbuergi May 23, 2026
327078d
fix(tests): poll DeletionTests Read/Query until delete fully propagates
rbuergi May 23, 2026
138c7d7
fix(cache): dispose hydration subscriptions on mesh hub shutdown
rbuergi May 23, 2026
993ff8f
fix(tests): two flake fixes — LinkedIn CT bump + Removed-wait predicate
rbuergi May 23, 2026
c31fd04
refactor(agents): rename Orchestrator → Assistant; delegation is opt-…
rbuergi May 23, 2026
9f0379f
feat(lsp): Roslyn language services for NodeType authoring
rbuergi May 23, 2026
5e2ca09
fix(delete) + diagnose(layout-area-render): two persistent CI failures
rbuergi May 23, 2026
5824ea0
diagnose(layout-area-render): logs in IObservable + LayoutDefinition …
rbuergi May 23, 2026
b985149
test(access-context): clear xUnit1051 + stream-poll inner subscription
rbuergi May 23, 2026
977aa4d
fix(chat+threads): bubble render race + StartingExecution cache lag +…
rbuergi May 23, 2026
ffc19de
fix(tests): Orchestrator→Assistant rename + CopyModify cache poll
rbuergi May 23, 2026
ebe2a00
fix(query): NotEqual/NotIn on PG must coalesce IS NULL
rbuergi May 23, 2026
fda0eec
fix(framework): deadlock-proof GetPermission + MeshService scope-correct
rbuergi May 23, 2026
a1e1e18
feat(chat): sub-thread delegation chips show thread title + icon
rbuergi May 23, 2026
a0ce3f9
fix(auth): VUserHelper targets mesh hub + skip when real-user context…
rbuergi May 24, 2026
13eab30
fix(tests+framework): two CI-flake fixes — synced-query race + GetCre…
rbuergi May 24, 2026
bd3ebb4
feat(chat): sub-thread redesign — inline link + runtime panel near input
rbuergi May 24, 2026
0a7b56a
test(orleans): skip dead-legacy-flow PortalFlow tests
rbuergi May 24, 2026
484bd69
fix(chat): missing satellite cell shows '— message missing —', not hu…
rbuergi May 24, 2026
f103be0
fix(chat): missing satellite — cache emits OnError; subscribe handles it
rbuergi May 24, 2026
889d472
chore(diagnostics): debug logging across page-hit → render namespaces
rbuergi May 24, 2026
013d1bb
chore(diagnostics): ApplicationInsights provider filter — Debug for s…
rbuergi May 24, 2026
92c8788
chore(diagnostics): cap Console at Warning for the Debug namespaces
rbuergi May 24, 2026
e8f04ba
test+framework: ThreadFlow reactive GUI primitives, Orleans PortalFlo…
rbuergi May 24, 2026
b45b24e
fix(activity): dedup TrackLogin + shrink probe timeout 2s→200ms
rbuergi May 24, 2026
8b5cb03
revert: drop explicit-id support from HandleSubmitMessage
rbuergi May 24, 2026
e527e53
perf(pg-query): collapse path-resolver fan-out to ONE PG query
rbuergi May 24, 2026
533aa72
feat(ai-tools): per-tool [ToolTimeout] attribute (default 30s)
rbuergi May 24, 2026
eedd094
feat(delegation): heartbeat detector + race-free bridge + GUI elapsed…
rbuergi May 24, 2026
3e9436f
fix(delegation): collapse registry/handlers, closure-only ExecuteDele…
rbuergi May 24, 2026
2ff0f63
fix(delegation): bypass cache for sub-thread reads + warning cleanup
rbuergi May 24, 2026
12312a4
fix(cache+delegation): retry missing-node hydration + await sub-threa…
rbuergi May 24, 2026
8952e15
fix(pg): satellite-namespace routing + tolerate missing satellite tables
rbuergi May 24, 2026
a3b7d54
feat(auth+persistence): central auth partition + watcher prime + Auth…
rbuergi May 24, 2026
d086118
test(activity): pin "cancel only while running" UI contract
rbuergi May 24, 2026
11c1964
diag(delegation): debug logs at every message-flow checkpoint
rbuergi May 24, 2026
db8c025
test(robustness): WaitForChanges propagates TimeoutException
rbuergi May 24, 2026
c2d2e69
fix(thread-dispatch): single-flight gate on InstallServerWatcher
rbuergi May 24, 2026
11258dc
fix(stream-update): return locally-computed `updated` + warn on NO-OP
rbuergi May 24, 2026
7286694
fix(persistence+ci): wire IDataChangeNotifier into InMemoryStorageAda…
rbuergi May 24, 2026
34d5766
fix(thread-history): load via IMeshNodeStreamCache + bump DelegationW…
rbuergi May 24, 2026
f242feb
fix(auth-partition): finish User→Auth rename + surface silent .Catch …
rbuergi May 24, 2026
fef0886
test(acme): bump layout-area render timeouts 10s → 30s
rbuergi May 24, 2026
de7b72b
fix(thread-history): parallel cache reads + loud guard on empty-when-…
rbuergi May 24, 2026
133ae39
fix(tests): pre-existing CI flakes — Layout fatal + Auth race + metho…
rbuergi May 24, 2026
6f3a0e2
revert: methodTimeout 60→30s (default) — per-test bumps to be discuss…
rbuergi May 24, 2026
7fc771b
refactor(query): kill Task.Factory.StartNew in ObserveQueryInternal —…
rbuergi May 24, 2026
d300f85
fix(compile): watcher posts DispatchCompileTrigger; handler runs on N…
rbuergi May 24, 2026
46e9e05
refactor(query): add IObservable<IReadOnlyList<QueryResult>> surface …
rbuergi May 24, 2026
7ee0b58
refactor(query): kill Task.Run in IMeshQueryProvider.Autocomplete def…
rbuergi May 24, 2026
5c0d448
refactor(query): IMeshQueryProvider.AutocompleteAsync → IObservable<Q…
rbuergi May 24, 2026
a2a6468
refactor(query): defer SubscribeOn(TaskPoolScheduler) to storage-adap…
rbuergi May 24, 2026
f0bcca5
docs(query): fix stale cref in IMeshQueryProvider.Autocomplete xmldoc
rbuergi May 24, 2026
aec5ed1
revert: ObserveQueryInternal RunQuery back to Task.Factory.StartNew
rbuergi May 24, 2026
194e879
revert: IObservable<QuerySuggestion> refactor + Task.StartNew kill — …
rbuergi May 25, 2026
2ee7339
test(query): skip SyncedQueryCrossSiloTest.DynamicCompile (180s Timeo…
rbuergi May 25, 2026
49ddf51
fix(ci): bump CI-tripping timeouts on 4 known slow tests
rbuergi May 25, 2026
b11457b
fix(orleans-tests): bump HandleStartExecutionOnExec cache-read timeou…
rbuergi May 25, 2026
6a2820d
fix(orleans-tests): gate Get(Streaming)ResponseAsync on WhenInitialized
rbuergi May 25, 2026
1b89852
fix(orleans-tests): bump client RequestTimeout 30s → 90s in OrleansTe…
rbuergi May 25, 2026
93f2c7f
revert: remove await WhenInitialized gate + OrleansTestBase 90s Reque…
rbuergi May 25, 2026
5f4c2ac
fix(query): DynamicCompile cross-silo — read live Content via GetMesh…
rbuergi May 25, 2026
b8b44b0
fix(orleans-tests): Resubmit_* tests — wait for settled state, not tr…
rbuergi May 25, 2026
17f0002
fix(orleans-tests): CompileActivityAccess — read live Content via Get…
rbuergi May 25, 2026
2bdc88b
fix(orleans-tests): seed a default Agent node so chat tests find a ha…
rbuergi May 25, 2026
24c63e3
fix(hosting): bump cache perm timeout 3s→15s + don't cache timeout de…
rbuergi May 25, 2026
d2bbfbb
fix(layout): collapse sync first-emit into SubscribeRequest reply
rbuergi May 25, 2026
18fe581
fix(layout/tests): Skip(1) on Replay-buffered first emit + wait for t…
rbuergi May 25, 2026
58cef52
fix(ai): drain pending Dispatched paths on streaming-loop entry add
rbuergi May 25, 2026
ff823eb
fix(autocomplete): bump overfetch cap when basePath is empty
rbuergi May 25, 2026
dcc9988
refactor(thread-thumbnail): drop cell stream loads, embed LayoutAreaC…
rbuergi May 25, 2026
a262853
test: emit TRX from every `dotnet test` invocation
rbuergi May 25, 2026
f3a8dc9
test(orleans/user-owned-models): unblock UserCreatesProvider via sync…
rbuergi May 25, 2026
8f77ac5
fix(layout/messaging): kill the test-host-pinning leak + 3 fiction tests
rbuergi May 25, 2026
61319b5
test(linkedin): wait for compile to settle before opening area subscr…
rbuergi May 25, 2026
c1f3550
test(acme): drain CreateNodeRequest callback via Observe.Subscribe
rbuergi May 25, 2026
067548e
fix(thread-submission): durable RequestedExecution replaces in-memory…
rbuergi May 25, 2026
cb207d9
test(pg): drop two redundant Skip-marker tests
rbuergi May 25, 2026
fcc3200
test(orleans): shared InMemoryStorageAdapter backing dicts + design doc
rbuergi May 25, 2026
3c354de
fix(content-collections): force IsEditable / ExposeInChildren on the …
rbuergi May 25, 2026
9cc73e8
docs(orleans): cache-hub design as the canonical rotate-test fix
rbuergi May 25, 2026
e2965ed
fix(cache): host MeshNodeStreamCache on dedicated registered hub
rbuergi May 25, 2026
95f840f
fix(content-collections): flip IsEditable/ExposeInChildren defaults t…
rbuergi May 25, 2026
e1d7d3c
test(content-collections): set ExposeInChildren=true on test fixtures
rbuergi May 25, 2026
647077a
revert(cache): manual hosted-hub creation in MeshNodeStreamCache
rbuergi May 25, 2026
75a479f
test(content-collections): align fixtures with flipped IsEditable/Exp…
rbuergi May 25, 2026
1f7fbb8
feat(routing): config-driven stream-routed address types + cache hub
rbuergi May 25, 2026
2546b52
test(layout): convert DebounceTest to TestScheduler; drop Task.Delay …
rbuergi May 25, 2026
5ece55d
test(rotate): switch to IMeshNodeStreamCache.Update + skip with finding
rbuergi May 25, 2026
4d72ff1
fix(routing): walk parent chain for sync sub-hub + HubAdded subject
rbuergi May 25, 2026
8bdc43d
test(rotate): keep skipped — parent-walk wasn't enough
rbuergi May 25, 2026
a2b882b
fix(framework-version): bake per-build ticks into AssemblyInformation…
rbuergi May 25, 2026
8405a6a
fix(cache): process-unique cache hub address — full routing round-tri…
rbuergi May 25, 2026
dd91495
fix(activity-hub): register CodeConfiguration in TypeRegistry so comp…
rbuergi May 25, 2026
812f6b1
fix(access-pipeline): bump 10s permission-check timeout to 45s for co…
rbuergi May 25, 2026
ee7bf44
test(persistence): bump WaitForNotification default timeout 5s → 15s …
rbuergi May 25, 2026
929bfe9
refactor(persistence): remove IDataChangeNotifier service; in-process…
rbuergi May 25, 2026
8182be6
fix(threading): symmetric Contains check on responseMsgId in Dispatch…
rbuergi May 25, 2026
97a6dcd
fix(synced-query): restore live change-feed subscription on StorageAd…
rbuergi May 25, 2026
644f1ae
test(content): align storage-collection fixtures with flipped ExposeI…
rbuergi May 25, 2026
fc957a0
test(autocomplete): align storage-collection fixtures with ExposeInCh…
rbuergi May 25, 2026
f284490
fix(persistence): VersionWritingStorageAdapter forwards Changes feed
rbuergi May 25, 2026
045d4d5
fix(persistence): PG adapter fires local Changes feed on Write/Delete
rbuergi May 25, 2026
27bf134
refactor(thread-submission): migrate to stream.Update; rewrite Delega…
rbuergi May 25, 2026
3447a8c
fix(persistence): PostgreSqlPathRoutingAdapter exposes merged per-sch…
rbuergi May 25, 2026
eab791d
test(persistence): align MapContentCollectionTest + PageLoadingTest s…
rbuergi May 25, 2026
4346a69
refactor(thread-exec): delete SubmitMessageRequest entirely
rbuergi May 25, 2026
4ea517a
test(persistence): revert ExposeInChildren=true on PageLoadingTest st…
rbuergi May 25, 2026
f326f24
refactor(thread-exec): orleans scheduler + completion notification on…
rbuergi May 25, 2026
f572da2
fix(persistence): FileSystemStorageAdapter fires in-process Changes f…
rbuergi May 25, 2026
3e3a9e5
Revert "fix(persistence): FileSystemStorageAdapter fires in-process C…
rbuergi May 25, 2026
c8c31c8
fix(agent-picker): use path:X scope:ancestors not namespace:X scope:s…
rbuergi May 25, 2026
e9332c7
feat(delegation-tool): list_sub_threads + send_to_sub_thread + summar…
rbuergi May 25, 2026
4eee845
test(node-ops): bump DeletionTests TestTimeout 45s → 90s for slow Lin…
rbuergi May 25, 2026
d3c30dd
feat(delegation): reactive sub-thread Idle subscription + dedicated S…
rbuergi May 25, 2026
13d2d1b
feat(ui): show dedicated Summary chip on assistant message bubbles
rbuergi May 25, 2026
8bc5537
feat(agent-instructions): teach agents the query+summary contract
rbuergi May 25, 2026
a6e37df
fix(thread-exec): strip in-flight <summary> block during streaming
rbuergi May 25, 2026
54d7fc6
diag(thread-exec): instrument streaming pipeline + auto-execute watcher
rbuergi May 25, 2026
5444701
diag(thread-exec): promote AppendUserInput + Submit logs from Debug →…
rbuergi May 25, 2026
d4f9dfe
refactor(delegation): ExecuteDelegationAsync → pure IObservable<string>
rbuergi May 25, 2026
195d1b6
Revert "test(node-ops): bump DeletionTests TestTimeout 45s → 90s for …
rbuergi May 25, 2026
f9d0dcb
Revert "fix(access-pipeline): bump 10s permission-check timeout to 45…
rbuergi May 25, 2026
151ebd1
Revert "test(persistence): bump WaitForNotification default timeout 5…
rbuergi May 25, 2026
e4a4e88
fix(build): per-build AssemblyVersion + migrate tests to IObservable<…
rbuergi May 25, 2026
c721706
refactor(tests): migrate to workspace.GetMeshNodeStream(path)
rbuergi May 25, 2026
0632e17
fix(thread-exec): Summary invariant on all terminal paths
rbuergi May 25, 2026
9a662ca
test(delegation): steer agent stream + assert correct summary parsing
rbuergi May 25, 2026
9be5af2
chore(tests): Trace-level logging for Orleans diagnostic + keep Threa…
rbuergi May 25, 2026
4d3c181
fix(security): close system-security leak in HandleGetPermission, dro…
rbuergi May 25, 2026
deeb2b2
fix(delegation): route Subscribe callbacks through parent thread hub …
rbuergi May 25, 2026
7dc1b62
fix(tests): bump PermissionTestExtensions default timeout 40s → 90s
rbuergi May 26, 2026
ee5ccb5
Revert "fix(delegation): route Subscribe callbacks through parent thr…
rbuergi May 26, 2026
5ab7a1c
fix(messaging): bump default RequestTimeout 30s → 60s
rbuergi May 26, 2026
18aae0d
fix(persistence-test): use built-in Group NodeType so MeshNode_Versio…
rbuergi May 26, 2026
a3ab990
fix(compile-cache): IsCacheValid finds timestamped subdir DLLs, not t…
rbuergi May 26, 2026
c12b735
docs(persistence-test): clarify why Group NodeType is needed for Mesh…
rbuergi May 26, 2026
4190a49
fix(persistence-test): stabilize PageLoadingTest cache directory so t…
rbuergi May 26, 2026
c7b1347
fix(persistence-test): stabilize DataContextIntegrationTest cache dir…
rbuergi May 26, 2026
f73a1b0
fix(persistence-test): drop unnecessary PingRequest in GraphHub_Initi…
rbuergi May 26, 2026
984634d
fix(persistence-test): bump Organization + ConcurrentRequests timeouts
rbuergi May 26, 2026
87b5632
fix(tests): stabilize SharedCacheDirectory across Acme + FutuRe test …
rbuergi May 26, 2026
1a954a0
refactor(compile): SemaphoreSlim → Lazy<Task<string?>> single-flight …
rbuergi May 26, 2026
be41196
fix(tests): stabilize SharedCacheDirectory in Content + Hosting.Monol…
rbuergi May 26, 2026
a10b3c1
fix(tests): bump timeouts + update CompilationCacheServiceTest for su…
rbuergi May 26, 2026
1e21d61
fix(routing+tests): single-shot path lookup, register Organization No…
rbuergi May 26, 2026
9479387
fix(activation): fast-fail probe for unregistered NodeTypes + remove …
rbuergi May 26, 2026
8d8d521
test(persistence): bump PageLoadingTest timeouts 60s → 120s for CI co…
rbuergi May 26, 2026
3440990
refactor(ai/thread): remove internal trigger events; control-plane fi…
rbuergi May 26, 2026
96dbe7f
fix(tests + orleans): migrate to FindStaticNode after MeshConfigurati…
rbuergi May 26, 2026
9ae5f72
refactor(data/activity): drop typed intra-hub request types
rbuergi May 26, 2026
6e1942d
fix(build): clean up CS warnings + drop unused meshConfig param on Un…
rbuergi May 26, 2026
430de08
test: add [Fact(Timeout = 30_000)] to 486 facts + debug logging in su…
rbuergi May 26, 2026
7dbdc20
test(fixture): reloadOnChange on appsettings.json so log level can fl…
rbuergi May 26, 2026
478bfea
refactor(ai/thread): single trigger path via GetMeshNodeStream — dele…
rbuergi May 26, 2026
77d9941
refactor: rename Organization NodeType to Space + drop per-tenant Par…
rbuergi May 26, 2026
fc2f119
test(ai/inbox): stream-based WaitForThreadAsync (no Task.Delay polling)
rbuergi May 26, 2026
7be6b91
test: finish Organization→Space rename across remaining test projects
rbuergi May 26, 2026
9a9f515
test(content): migrate MarkdownEditorEchoTest to canonical GetMeshNod…
rbuergi May 26, 2026
a5b6897
Merge origin/main into bug_fix — keep NodeType: Space for ACME (Space…
Copilot May 26, 2026
f9a60f8
test(timeouts): global methodTimeout 30s → 90s; revert 536 per-test T…
rbuergi May 26, 2026
8af66d8
test(timeouts): restore methodTimeout to 30s
rbuergi May 26, 2026
02dd88f
fix(tests): move ConcurrentRequests to its own class — escape shared-…
rbuergi May 26, 2026
9d18ad3
refactor(ai/thread): collapse client thread ops into IMessageHub exte…
rbuergi May 26, 2026
12f2869
refactor(ai/thread): mark ThreadSubmission + ThreadExecution + RoundD…
rbuergi May 26, 2026
7c04fb5
refactor(ai/thread): delete intent payloads + per-operation watchers …
rbuergi May 26, 2026
5cbb660
fix(logging): demote chatty Information emitters + opt-in test file logs
rbuergi May 26, 2026
d3ae222
refactor(mesh/activity): hub.CancelActivity / hub.RequestActivityStat…
rbuergi May 26, 2026
af96010
docs(activity/thread): ActivityOperations.md + 100% reactive Observe …
rbuergi May 26, 2026
207656f
test(page-loading): give CI more headroom for cold Roslyn compile
rbuergi May 26, 2026
2ef5a8b
feat(mesh/permissions): hub.CheckPermission / hub.GetEffectivePermiss…
rbuergi May 26, 2026
6cd27b6
docs(access-control): point public callers at hub.CheckPermission
rbuergi May 26, 2026
017f887
chore(ai): delete obsolete AgentOrderingHelper.QueryAgentsAsync + Get…
rbuergi May 26, 2026
8cc3479
fix(testbase): unique client addresses + per-test client dispose
rbuergi May 26, 2026
2dd1b19
fix(orleans-test): same unique-client-address + per-test dispose
rbuergi May 26, 2026
3aa8923
refactor(permissions): kill PermissionHelper, migrate to hub.CheckPer…
rbuergi May 26, 2026
66cc395
feat(graph/query): hub.GetQuery(id, queries) static shorthand
rbuergi May 27, 2026
8790c7c
refactor(query/cache): centralise synced-query registry into IMeshNod…
rbuergi May 27, 2026
5c60334
refactor(security): collapse ISecurityService → abstract SecurityServ…
rbuergi May 27, 2026
5bcdc38
refactor(cache): IMeshNodeStreamCache.GetQuery → ImmutableDict CAS + …
rbuergi May 27, 2026
7645610
refactor(security): delete SecurityService class, port algorithm to s…
rbuergi May 27, 2026
9eb62c0
fix(cache,security): AutoConnect(0) on synced query + offload MeshQue…
rbuergi May 27, 2026
8a64cc2
test(security): delete 3 stale tests + add per-test watchdog (30s sof…
rbuergi May 27, 2026
4c69004
fix(messaging/hosting): stop logging every successful hub disposal at…
rbuergi May 27, 2026
7fed64c
perf(test): gate forced-GC at dispose behind MESHWEAVER_TEST_FORCE_GC
rbuergi May 27, 2026
04fae84
fix(security): capture AccessContext on caller's thread for AsyncLoca…
rbuergi May 27, 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
  •  
  •  
  •  
131 changes: 0 additions & 131 deletions .claude/settings.json

This file was deleted.

113 changes: 104 additions & 9 deletions .github/workflows/dotnet-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,12 @@ on:
jobs:
build:
name: Build and Run Unit tests
timeout-minutes: 30
# 60 min: setup+restore+build runs ~3 min; tests currently take ~35-40 min
# (FutuRe ~6m, Autocomplete ~4m, AI ~3m, Acme ~3m, plus ~30 smaller projects).
# Headroom for a single hung project burning its 6m wallclock cap without
# truncating the suite. If this gets tight again, the next move is matrix-
# parallelizing the per-project loop instead of bumping the cap further.
timeout-minutes: 60
runs-on: ubuntu-latest

steps:
Expand All @@ -34,20 +39,110 @@ jobs:
DOTNET_ENVIRONMENT: Development
Logging__LogLevel__Default: Warning
run: |
find test -name '*.csproj' \
! -path '*PostgreSql*' \
! -path '*Cosmos*' \
! -path '*Orleans*' \
! -path '*Acme*' \
! -path '*FutuRe*' \
-exec dotnet test {} --no-build --verbosity normal -l:trx \
--blame-hang-timeout 3m --blame-hang-dump-type mini \; 2>&1 | tee test/test-results.log
# Only Cosmos is excluded — needs the Cosmos emulator which is heavy to
# set up on a runner. Everything else runs (PostgreSql via Testcontainers
# using pre-installed Docker, Orleans via in-proc TestCluster, Acme/FutuRe
# via dynamic Code-piece compilation).
#
# set +e so a hung/aborted test host (non-zero exit) doesn't terminate
# the loop — we want EVERY csproj to attempt to run, then surface what
# broke after the loop completes. Without this, pipefail propagates a
# single hang into a hard SIGTERM that kills sibling test projects and
# the artifact-upload step has nothing to publish.
#
# Disk hygiene: previous "verbose normal | tee -a test-results.log"
# form was bloating one log file with every test's structured trace
# output. With ~30 csproj × 100s of tests × verbose Trace logs from
# MessageHub, the file grew faster than the 14 GB ephemeral disk could
# absorb and the runner sent SIGTERM (exit 143) mid-run. Switch to
# `--verbosity minimal`, drop the tee, and only persist the per-project
# exit markers — trx files still capture full per-test results.
set +e
: > test/test-results.log
echo "::group::Per-project test runs"
# `! -path '*/bin/*'`: the build copies sample csproj fixtures into test
# bin dirs (e.g. MeshWeaver.Samples.Graph.csproj under
# test/MeshWeaver.Acme.Test/bin/Debug/net10.0/SamplesGraph/). They match
# the *.csproj pattern but aren't test projects — invoking dotnet test on
# each wastes ~1 s × 23 entries per run.
#
for csproj in $(find test -name '*.csproj' \
! -path '*Cosmos*' \
! -path '*/bin/*' \
| sort); do
name=$(basename "$csproj" .csproj)
echo "::endgroup::"
echo "::group::$name"
# `timeout 6m`: per-project wall-clock cap. blame-hang-timeout 30s only
# fires when xUnit considers a *test* to have stalled — fixture-init
# and between-class hangs slip past it. 6 min covers the slowest
# legitimate project today (FutuRe ~5 min) with headroom; defense-in-
# depth backstop in case any of the skipped Linux-hang projects gets
# re-enabled or another regresses to the same pattern.
# blame-hang-timeout: 90 s of test-runner inactivity before blame
# collects a hang dump and aborts the test host. The previous 30 s
# was firing on legitimate teardown — multiple projects (Hosting.Blazor,
# Hosting.Orleans, Autocomplete, NodeOperations) showed all tests
# passing in <5 s but the testhost taking 30+ s in finalizer/dispose
# cleanup of hosted hubs / static caches, then getting killed and
# reported as "Test host process crashed" exit=1. 90 s gives genuine
# teardown enough room without masking real hangs (the per-project
# 6 m wall-clock cap below is the hard backstop).
timeout --signal=TERM --kill-after=30s 6m \
dotnet test "$csproj" --no-build --verbosity minimal -l:trx \
--blame-hang-timeout 90s --blame-hang-dump-type mini
rc=$?
if [ "$rc" = "124" ] || [ "$rc" = "137" ]; then
marker="[CI] $name exit=$rc TIMEOUT (6m wall-clock cap hit — likely fixture/init hang)"
else
marker="[CI] $name exit=$rc"
fi
echo "$marker"
echo "$marker" >> test/test-results.log
done
echo "::endgroup::"
exit 0
- name: Fail on hang / aborted test run
# blame-hang aborts the test host and writes a minidump (blame-*.dmp).
# Test *failures* are surfaced separately by Publish Test Results below;
# this step's only job is to fail loudly on a HANG so it doesn't get
# masked behind a "test results published" green checkmark when the trx
# contains only what completed before the abort.
run: |
hang_dumps=$(find test -name 'blame-*.dmp' 2>/dev/null | wc -l)
if [ "$hang_dumps" -gt 0 ]; then
echo "::error::A test process hung — blame-*.dmp files were written."
echo "--- Hang dumps ---"
find test -name 'blame-*.dmp' 2>/dev/null
echo "--- Per-project exit codes (non-zero indicates the hung project) ---"
cat test/test-results.log
exit 1
fi
- name: Collect test logs for artifact
if: always()
run: |
mkdir -p collected-logs
# Find all test-logs directories and collect their contents without renaming
find . -path "*/bin/*/test-logs/*.log" -type f -exec cp {} collected-logs/ \; 2>/dev/null || true
# The MonolithMeshTestBase phase trace + dispose trace live in the
# process tempdir (Path.GetTempPath() == /tmp on the runner). They
# carry the per-class INIT_MEM / DISPOSE_MEM lines that pinpoint
# which test class drives the AI.Test / Autocomplete.Test / Content.Test
# / Hosting.Monolith.Test OOM. Copy with rename so they don't collide.
if [ -f /tmp/meshweaver-test-trace.log ]; then
cp /tmp/meshweaver-test-trace.log collected-logs/_meshweaver-test-trace.log
fi
if [ -f /tmp/meshweaver-dispose-trace.log ]; then
cp /tmp/meshweaver-dispose-trace.log collected-logs/_meshweaver-dispose-trace.log
fi
# Per-class INIT → DISPOSE memory delta summary (one line per test instance):
# managed=… rss=… rssAnon=… unmanaged=… shared=0|1
# rssAnon (Linux only) is where the Autofac Reflection.Emit factory pin lives;
# unmanaged = rss − managed is the portable approximation. Grep this file to
# find the worst leakers without wading through the full per-event trace.
if [ -f /tmp/meshweaver-memory-delta.log ]; then
cp /tmp/meshweaver-memory-delta.log collected-logs/_meshweaver-memory-delta.log
fi
- name: Publish Test Results
# uses: EnricoMi/publish-unit-test-result-action/composite@v2
uses: EnricoMi/publish-unit-test-result-action@v2.12.0
Expand Down
Loading
Loading