Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
893 commits
Select commit Hold shift + click to select a range
b238953
fix(mesh): UpdateRemote drop incomparable version gate; ApiToken cach…
rbuergi May 11, 2026
66afa27
feat(portal+mcp): Systemorph hero layout + MCP Upload tool
rbuergi May 11, 2026
c3036b1
feat(portal,auth): redesign login + gate menus on auth + wire LinkedIn
rbuergi May 11, 2026
4ef2981
fix(api-tokens): explicit SaveMeshNodeRequest after sync-protocol Rev…
rbuergi May 11, 2026
0179387
feat(rest+cli): expose mesh ops via /api/mesh/* and `memex` CLI
rbuergi May 11, 2026
04965b4
fix(mesh): UpdateRemote completes inline on no-op patches
rbuergi May 11, 2026
86f0019
fix(chat): Agent + Model dropdowns fit on one row
rbuergi May 11, 2026
c47dab8
feat(auth): config-driven root-scope Admin seed (Auth:GlobalAdmins)
rbuergi May 11, 2026
2ad321e
fix(synced-query): subscribe to changeNotifier BEFORE initial query
rbuergi May 11, 2026
4d5d68e
docs(cqrs): Query.Content is stale — GetMeshNodeStream is the only li…
rbuergi May 11, 2026
8242d13
docs(cqrs): no pedestrian queries — use workspace.GetQuery (synced)
rbuergi May 11, 2026
0279398
wip(persistence): IStorageAdapter → IObservable, RoutingCore reduced
rbuergi May 11, 2026
bc772d9
wip(persistence): IStorageAdapter routing, IObservable end-to-end
rbuergi May 11, 2026
8c243f2
wip(persistence): src/ green, IObservable end-to-end on IStorageAdapter
rbuergi May 11, 2026
be7cd13
wip(persistence): build GREEN, IStorageAdapter migration complete
rbuergi May 12, 2026
8be22e3
fix(routing): null-parent ListChildPaths fans out partition keys
rbuergi May 12, 2026
5ffc4d2
fix(query): AddInMemoryPersistence registers InMemoryStorageAdapter; …
rbuergi May 12, 2026
addc394
refactor(query): delete QueryAsync; everyone consumes ObserveQuery
rbuergi May 12, 2026
86e708d
fix(query): fire IDataChangeNotifier from Create/Update/Delete handlers
rbuergi May 12, 2026
d1a7fc7
fix(query): defer + catch synchronous throws in WalkLevel / match pip…
rbuergi May 12, 2026
5d86adc
fix(query): tolerate sync throws in exact-path probe + lazy-init Rout…
rbuergi May 12, 2026
c90f512
fix(persistence): make MeshConfiguration optional in MeshConfiguratio…
rbuergi May 12, 2026
3e0b12b
fix(delete): map "No node found" subscribe errors to NodeNotFound rej…
rbuergi May 12, 2026
331d156
fix(query): static node provider yields when scope walks the static set
rbuergi May 12, 2026
3fb7b64
fix(query): per-provider buckets + writable-first ordering + post-mer…
rbuergi May 12, 2026
6fcee4b
fix(query): merge-time select projection + test bridge uses object ge…
rbuergi May 12, 2026
bbfb81e
fix(query): AncestorsAndSelf walk no longer recurses into descendants
rbuergi May 12, 2026
8b58292
fix(query): AncestorsAndSelf walks ancestor children one level (not r…
rbuergi May 12, 2026
8d2891f
fix(query): per-partition MeshQueryEngine gets its adapter (was null)
rbuergi May 12, 2026
17fd443
fix(ai-tests): unblock 6 failing AgentChatClient/AgentSelection/Mcp t…
rbuergi May 12, 2026
869f146
test(acme): stabilise Planning/Backlog render tests against NodeType …
rbuergi May 12, 2026
5101235
refactor(query): push scope walks to providers, one boss for IMeshQue…
rbuergi May 12, 2026
62d50a9
fix(security): DeleteNode maps DeliveryFailureException(Unauthorized)…
rbuergi May 12, 2026
c743b81
fix(auth+mesh): stop leaking hub callbacks on request to non-existent…
rbuergi May 12, 2026
5368f28
test(threading): bump GetDataRequest_ToNonExistent* Fact timeout to 15s
rbuergi May 12, 2026
0aa89f0
fix(query): scope:children parser case, hierarchy walk, source:activi…
rbuergi May 12, 2026
93e1cde
test(nodeops): add NodeType to DeletionValidator test nodes
rbuergi May 12, 2026
bb3c0a1
arch(partition-storage): per-(schema,table) hub skeleton + CI cap-fix
rbuergi May 12, 2026
33661f5
feat(partition-storage): reactive partition discovery + schema-init i…
rbuergi May 12, 2026
f0ec4da
feat(partition-storage): activate via AddPartitionStorageHubs + IMemo…
rbuergi May 12, 2026
a2acff8
test(postgres): isolate ObserveQueryTests in its own Postgres collection
rbuergi May 12, 2026
9bee811
test(content): stabilise NewComment_DataChangeToWrongAddress via stre…
rbuergi May 12, 2026
e4de719
fix(synced-query/postgres): port early-backlog race fix to PostgreSql…
rbuergi May 12, 2026
e7c3440
fix(query): engine over-applies request.Skip — load (Skip+Limit), let…
rbuergi May 12, 2026
667bfbb
fix(meshnode): recursive delete — block resurrection from per-hub sta…
rbuergi May 12, 2026
b13eea7
fix(pg-notify): trigger on satellite tables + auto-start change listener
rbuergi May 12, 2026
53e0860
feat(graph): NodeTypeRuntimeMirror + IMemoryCache registry (infra onl…
rbuergi May 12, 2026
f8277b4
refactor(graph): extract NodeType compile to NodeTypeCompilationHelpe…
rbuergi May 12, 2026
b0d994d
feat(graph): NodeTypeStreamCache — singleton, shared NodeType MeshNod…
rbuergi May 12, 2026
b19c95c
fix(persistence): restore version-history snapshots via IStorageAdapt…
rbuergi May 12, 2026
c2d7178
fix(blazor): UserIdentityCache queries User nodes across partitions (…
rbuergi May 12, 2026
71eb08a
refactor(mesh): INodeConfigurationResolver returns IObservable, no To…
rbuergi May 12, 2026
12fe1d9
feat(graph): eager compile kickoff on per-NodeType hub init + NotFoun…
rbuergi May 12, 2026
80fdd15
refactor(graph,ai): read NodeType state straight off MeshNode (Stage …
rbuergi May 12, 2026
a508971
refactor(ai): schema lookup off MeshNode, drop GetCachedHubConfiguration
rbuergi May 12, 2026
eee80ef
refactor(blazor,graph): NavigationService creatable-types via ScanTop…
rbuergi May 12, 2026
379cd7e
fix(ai): GetDiagnostics — static fast-path + NodeTypeService fallback
rbuergi May 12, 2026
7138580
refactor: push IObservable up, drop hub-touching .ToTask() in src
rbuergi May 13, 2026
a3872d0
fix(ai): LookupCompilationError — NodeTypeService fallback on both paths
rbuergi May 13, 2026
25130e2
feat(graph,docs): compile write-back to MeshNode + activity-hub doctrine
rbuergi May 13, 2026
70026bd
fix(delete-node): activity log carries 'not found' message on NotFound
rbuergi May 13, 2026
862aab8
feat(graph): compile runs on the Activity hub, not the NodeType hub
rbuergi May 13, 2026
c5e2d55
chore(graph): update doc on ResolveViaStream readiness gap
rbuergi May 13, 2026
9b48547
refactor(graph): Activity is the single writer of parent NodeType state
rbuergi May 13, 2026
8487ced
feat(graph): EnrichWithNodeType uses ResolveViaStream — Stage 4 unblo…
rbuergi May 13, 2026
0d2ac50
refactor(graph,mesh): consumers use NodeTypeEnrichmentHelpers static …
rbuergi May 13, 2026
27ed0f7
chore(graph): drop dead INodeTypeService.GetAccessRule call
rbuergi May 13, 2026
07b2743
feat(graph): close write-back race + comprehensive activity log + Rel…
rbuergi May 13, 2026
6916eb4
chore(blazor): drop dead INodeTypeService dependency from CreateNode.…
rbuergi May 13, 2026
fc692c7
chore(graph): consumers stay on INodeTypeService.EnrichWithNodeType f…
rbuergi May 13, 2026
58ecf66
fix(path-resolver): config match falls back when persistence walk stalls
rbuergi May 13, 2026
cf301bb
feat(creatable-types): synced-query provider + 100%-reactive dropdown
rbuergi May 13, 2026
f89c1ed
feat(compile-progress): reactive UI off INodeTypeService
rbuergi May 13, 2026
763c52a
refactor(mesh-ops): drop INodeTypeService fallbacks
rbuergi May 13, 2026
2ba06ee
refactor(graph): MeshNodeHubFactory + NodeConfigurationResolver use s…
rbuergi May 13, 2026
e67c7d3
test: migrate INodeTypeService consumers to new APIs
rbuergi May 13, 2026
fc4e50f
refactor(graph): delete NodeTypeService + INodeTypeService
rbuergi May 13, 2026
d116a18
refactor(compile): delete legacy Task-based ResolveCodeIncludesAsync
rbuergi May 13, 2026
2e3781a
refactor(blazor): drop Task.Delay timeouts, use reactive primitives
rbuergi May 13, 2026
e211b21
refactor(social): PastPostIngestJob — observable Interval, no Task.Delay
rbuergi May 13, 2026
edf109c
fix(stream): framework-owned Version bump + stream.Where(settled) rea…
rbuergi May 13, 2026
0d6fcc7
fix(enrich): static-provider NodeTypes short-circuit the compile wait
rbuergi May 13, 2026
95faf4e
fix(creatable-types): query via IMeshQueryCore, surface static + dyna…
rbuergi May 13, 2026
8a553be
fix(testbase): sanitise '/' in AssignmentNodeFactory ids + reactive W…
rbuergi May 13, 2026
a429113
fix(agent-picker): per-context query id + nodeTypePath flowing throug…
rbuergi May 13, 2026
4441a03
log(create-node): surface AccessContext at Information level
rbuergi May 13, 2026
136d3bc
log(create-node): demote AccessContext line to Debug — keep off CI
rbuergi May 13, 2026
54d3f87
log(test): enable MeshWeaver.Messaging Information — surface delivery…
rbuergi May 13, 2026
77847c4
Revert "log(test): enable MeshWeaver.Messaging Information — surface …
rbuergi May 13, 2026
281d005
fix(enrich): IStaticNodeProvider fast-path — keep delegates in-process
rbuergi May 13, 2026
80d766b
fix(autocomplete): Aggregate over Scan + Throttle over LastOrDefault
rbuergi May 13, 2026
8228ce6
fix(delete): bulk-atomic recursive delete + stop post-delete re-save
rbuergi May 14, 2026
3bffe0c
test: harden CI-flaky stream waits with Where predicates
rbuergi May 14, 2026
f7958b7
refactor(node-type): EnrichWithNodeType consumes shared INodeTypeStre…
rbuergi May 14, 2026
b92dd54
chore: drop stray pg-diag.log debug writes from PostgreSqlChangeListener
rbuergi May 14, 2026
d9c850e
fix(node-type): compile-activity writes terminal state through the sh…
rbuergi May 14, 2026
c76ecd5
fix(warnings): resolve CS0419/CS1574/CS1591/CS4014/xUnit1031/xUnit1051
rbuergi May 14, 2026
4f3241a
fix(creatable-types + compile-activity): real JSON options, self-reso…
rbuergi May 14, 2026
97dacdb
fix(routing): fan-out picks up partitions provisioned after subscribe
rbuergi May 14, 2026
ad2c920
fix(creatable-types): explicit CreatableTypes whitelist filters auto-…
rbuergi May 14, 2026
a7f8650
fix(delegation): activate sub-thread hub via its own remote stream
rbuergi May 14, 2026
69427f1
fix(node-type,content-test): non-NodeType paths + skip generated _Rel…
rbuergi May 14, 2026
2022c83
fix(search): exclude satellites from NodeType search + harden order-d…
rbuergi May 14, 2026
e6d2630
fix(mesh): UpdateRemote carries EntityUpdate payload so patches reach…
rbuergi May 14, 2026
fb256e9
fix(mesh): minimal UpdateRemote ChangeItem — add payload only, keep F…
rbuergi May 14, 2026
8dee7e6
fix(node-type): verify-before-skip compile kickoff — self-heal stale …
rbuergi May 14, 2026
f30a808
chore(logging): sensible production log levels for Memex.Portal.Distr…
rbuergi May 14, 2026
e86616e
chore(logging): keep message tracing lightweight — never dump full me…
rbuergi May 14, 2026
4c74de2
fix(auth): resolve identity ObjectId to the username, never the raw e…
rbuergi May 14, 2026
d3b5f8e
test: harden 3 long-standing CI failures with robust waits
rbuergi May 15, 2026
4b8ea26
fix(serialization,test): drop [PreventLogging] on MeshNode.Content + …
rbuergi May 15, 2026
c6d91de
fix(activation,routing): kill EnrichWithNodeType double-call + Persis…
rbuergi May 15, 2026
5222b7b
fix(routing): catalog via IMeshQueryCore + Matches gate; never Persis…
rbuergi May 15, 2026
b549600
fix(orleans): activation chain Subscribe handles onCompleted — never …
rbuergi May 15, 2026
2ce67b2
fix(routing,query): catalog returns raw nodes, MeshQuery gates by Mat…
rbuergi May 15, 2026
dc33130
chore(graph): remove noisy false-positive Warning logs
rbuergi May 15, 2026
4c07f9b
feat(mesh): CreateOrUpdateNodeRequest — single upsert verb, kills del…
rbuergi May 15, 2026
ea8a555
fix(mesh): CreateOrUpdate handler routes existing-target writes throu…
rbuergi May 15, 2026
a87c748
fix(node-type): single-flight compile watcher + CreateRelease via Pen…
rbuergi May 15, 2026
2de2567
fix(mesh): per-node hub disposes itself on own deletion + 2 test stab…
rbuergi May 15, 2026
f24b5b3
fix(test): unblock build — drop dangling v1AssemblyLocation reference
rbuergi May 15, 2026
3a687b8
fix(mesh): revert per-node hub self-disposal on own deletion
rbuergi May 16, 2026
e4a3269
refactor(mesh): delete MeshNode.AssemblyLocation; cross-silo refs via…
rbuergi May 16, 2026
362a300
fix(node-type): single-flight compile via status-as-lock; no in-memor…
rbuergi May 16, 2026
ae97249
refactor(persistence): RoutingPersistenceServiceCore 100% reactive init
rbuergi May 16, 2026
6217ff0
fix(node-type): fresh sources for compile + persist store version on …
rbuergi May 16, 2026
1e42ab9
refactor(persistence): add QueryProvider + VersionQuery to IPartition…
rbuergi May 16, 2026
077c430
Revert "refactor(persistence): add QueryProvider + VersionQuery to IP…
rbuergi May 16, 2026
b007893
refactor(persistence): delete RoutingPersistenceServiceCore + cousins…
rbuergi May 16, 2026
b08f389
refactor(persistence): delete InMemory/FileSystem/Caching factories —…
rbuergi May 16, 2026
ce6b89e
fix(node-type): skip compile kickoff for static NodeTypes
rbuergi May 16, 2026
bd51e77
chore: clear leftover CS1574/CS1591/CS8604 warnings
rbuergi May 16, 2026
5f59d48
fix(mesh): per-node hub re-seeds workspace on external Created/Updated
rbuergi May 16, 2026
3946654
fix(nodetype): self-heal stale Status=Ok, fire compile for source-bea…
rbuergi May 16, 2026
f4bedcd
refactor(persistence): delete Postgres + Cosmos factories, eliminate …
rbuergi May 16, 2026
ec8a47e
fix(persistence): default IAssemblyStore for file-system hosts; warn …
rbuergi May 16, 2026
fc518d4
fix(node-type): self-heal missing assembly via Pending flip + retry
rbuergi May 16, 2026
2889240
fix(persistence): aggregate root listings across providers instead of…
rbuergi May 16, 2026
80aaa67
fix(persistence): register default IAssemblyStore from every AddInMem…
rbuergi May 16, 2026
1614f03
fix: 5 of 11 remaining CI failures
rbuergi May 16, 2026
2687516
fix(persistence): register _Access / _Activity / _UserActivity / _Thr…
rbuergi May 16, 2026
f1312ef
fix(tests): bump RequestTimeout to 60s + CompilationErrorTest budget …
rbuergi May 16, 2026
50a56dd
fix(parsers): defensive frontmatter regex extracts Name/Category/Icon…
rbuergi May 16, 2026
c881b68
fix: 4 remaining CI failures
rbuergi May 16, 2026
8990120
fix(tests): AmericasIns/AsiaRe Overview wait for full render (not the…
rbuergi May 16, 2026
f7e5239
fix(persistence): discover existing Postgres schemas at startup so pe…
rbuergi May 16, 2026
fa0e9b9
fix: 4 remaining CI failures + harden Postgres partition routing
rbuergi May 16, 2026
f82ed20
fix(node-type): re-kick stale Compiling on hub activation + compile-t…
rbuergi May 16, 2026
fc3ef54
test(postgres): pin PartitionStorageProvider routing contract + rever…
rbuergi May 16, 2026
a6b6e14
feat(persistence): IStorageAdapter.ResolvePath — single-query path re…
rbuergi May 16, 2026
27a5426
refactor(routing): PathResolutionService owns path resolution end-to-end
rbuergi May 16, 2026
dd77738
refactor(routing): delete MeshCatalog + INodeTypeStreamCache
rbuergi May 16, 2026
4c515d9
test(postgres): stabilize ObserveQuery_IgnoresChangesOutsideScope
rbuergi May 16, 2026
39077ce
fix(build): rename remaining INodeTypeStreamCache references → IMeshN…
rbuergi May 17, 2026
ef8ab8b
fix(path-resolution): synthesize MeshNode for partition-root virtual …
rbuergi May 17, 2026
6e34e58
test(orleans): real grain-activation regression for partition-root de…
rbuergi May 17, 2026
01edd00
feat(onboarding): UserOnboardingService — testable dual-write + V20 m…
rbuergi May 17, 2026
211f603
fix(path-resolution): repair ResolvePath dispatch chain + InMemory in…
rbuergi May 17, 2026
21be006
chore: delete one-shot migration scaffolding (Skip-only since 2026-03)
rbuergi May 17, 2026
0cf722b
refactor(path-resolution): pure IMeshQueryCore delegation
rbuergi May 17, 2026
eeac3a2
fix(routing): lazy per-partition lookup via information_schema, drop …
rbuergi May 17, 2026
5578fb4
refactor(routing): IPartitionStorageProvider.Matches returns IObserva…
rbuergi May 17, 2026
841ebff
refactor(async): eliminate hub-reachable await/FirstAsync — 100% obse…
rbuergi May 17, 2026
d295a8a
refactor(routing): eliminate Matches/ResolveDefinition/Priority from …
rbuergi May 17, 2026
020abf2
refactor(storage): Write returns IObservable<MeshNode?> for try-then-…
rbuergi May 17, 2026
8322f49
refactor(routing): PgPartitionCache + pg_notify + MeshQuery fan-out —…
rbuergi May 17, 2026
2175942
test(routing): Stage 9 — integration suites + storage adapter doc
rbuergi May 17, 2026
5d04c25
test(routing): Stage 9 new suites use shared PostgreSqlFixture (testc…
rbuergi May 17, 2026
895f9de
fix(query): StaticNodeQueryProvider honours multi-value path:a|b|c
rbuergi May 17, 2026
4167fc3
chore(security): drop unused Task-based IPartitionAccessProvider
rbuergi May 17, 2026
a7a7642
fix(enrichment): NodeType slow-path accepts null/Unknown CompilationS…
rbuergi May 17, 2026
c23ad87
fix(persistence): idempotent decorator + core/wrapper registration
rbuergi May 17, 2026
daaad38
fix(orleans): reactive hub-readiness via ReplaySubject(1), no WaitAsync
rbuergi May 17, 2026
dfdaeee
fix(graph): default node hub gets AddDefaultLayoutAreas + activity lo…
rbuergi May 17, 2026
0b9f4c1
test(orleans): Delegation test sets SwappableFactory inner
rbuergi May 17, 2026
595591c
test(orleans): Delegation factory extends ChatClientAgentFactory + Ob…
rbuergi May 17, 2026
558d6c9
fix(graph): CreateOrUpdate forwards UpdateNodeRequest + activity log …
rbuergi May 17, 2026
aaf84cb
fix(sync-stream): change-feed resubscribe only fires on Created/Deleted
rbuergi May 17, 2026
aed157b
Revert "fix(sync-stream): change-feed resubscribe only fires on Creat…
rbuergi May 17, 2026
ddda56b
fix(submission): single-flight dispatch + idempotent WithInitializati…
rbuergi May 17, 2026
bf1d16d
fix(orleans): Channel<T> FIFO queue replaces ReplaySubject in Message…
rbuergi May 17, 2026
ea9d3e0
fix(submission): wait for OUR commit (responseId in Messages), not st…
rbuergi May 17, 2026
42c1f93
fix(orleans): blocking OnActivateAsync — build hub before returning
rbuergi May 17, 2026
526fccb
fix(node-type): activity stamps CompiledFrameworkVersion + slow-path …
rbuergi May 17, 2026
f74d93e
refactor(orleans): per-class silo + non-blocking activation via Synch…
rbuergi May 18, 2026
9516698
fix(compile-activity): 5s Timeout + cached-SyncedQuery fallback on so…
rbuergi May 18, 2026
fc605dc
fix(type-registry): register NodeTypeRelease — pinned-release branch …
rbuergi May 18, 2026
58d63c3
fix(test): pre-warm FluentAssertions framework detection in ModuleIni…
rbuergi May 18, 2026
aae04d0
fix(test): suppress FluentAssertions license banner during module-ini…
rbuergi May 18, 2026
e8d1124
log(node-type-activity): WriteToParent emits Info-level result + obse…
rbuergi May 18, 2026
c656184
feat(mesh-extensions): commit-then-publish change-feed via storage he…
rbuergi May 18, 2026
6e90918
fix(compile-pipeline): self-heal on Status=Error + idempotent assembl…
rbuergi May 18, 2026
7f08bc1
feat(compile-progress): NACK swap to NodeType Progress area on Compil…
rbuergi May 18, 2026
42032c4
test(node-type-progress): cold + warm cycle through Progress area
rbuergi May 18, 2026
e8c08ce
fix(orleans-tests): partition-root MeshNode synthesis + export-area key
rbuergi May 18, 2026
7390cba
fix(ai): defensive responseMsgId dedup in DispatchRound thread Update
rbuergi May 18, 2026
f1233cd
Revert "fix(ai): defensive responseMsgId dedup in DispatchRound threa…
rbuergi May 18, 2026
af63089
test: align test expectations with shipped impl changes (8 tests)
rbuergi May 18, 2026
378ede8
test(pg): catch DeliveryFailure read-miss + bump container max_connec…
rbuergi May 18, 2026
7880dc5
chore: clear 8 build warnings (CS86xx + CS1574)
rbuergi May 18, 2026
ded84db
test(timeout): mesh hub gets 60s RequestTimeout + LinkedIn import 120s
rbuergi May 18, 2026
6be3e54
test(linkedin-pull-actions): match LinkedInTelemetry timeout budget
rbuergi May 18, 2026
baf1b4e
fix(onboarding): wrap CreateUser writes in ImpersonateAsSystem
rbuergi May 18, 2026
979c246
test(pg): ImpersonateAsSystem for brand-new-partition-root writes
rbuergi May 18, 2026
4042ec1
test(pg): revert broken WithCommand max_connections + drop MaxPoolSiz…
rbuergi May 18, 2026
450cc23
test(watchdog): ReadNodeAsync 30s → 60s to match mesh-hub RequestTimeout
rbuergi May 18, 2026
ff32223
test(fsw): poll for inotify event on Linux CI
rbuergi May 18, 2026
b817255
test(orleans+pg): fan-out coverage for Activity Feed + Latest Threads
rbuergi May 18, 2026
2bdc9e6
test(fixtures): tolerate trailing-comma JSON + drop invalid Npgsql id…
rbuergi May 18, 2026
213f914
test(pg): dispose tracked schema NpgsqlDataSources between tests
rbuergi May 18, 2026
1fb79e3
test(pg): ImpersonateAsSystem for GetMeshNodeStream_UserPartitionRoot
rbuergi May 18, 2026
aef6f25
fix(persistence): DataChangeNotifier tolerates pre-disposed subscribers
rbuergi May 18, 2026
bbcf0fc
test(ai): register file-system assembly store + close SetIsExecuting …
rbuergi May 18, 2026
30592a9
test(read-hub): 60s RequestTimeout on the dedicated reader hub
rbuergi May 18, 2026
5b70fcc
feat(pg-fanout): cross-partition IMeshQueryProvider for UserActivity …
rbuergi May 18, 2026
64f82bc
test(orleans+pg): UserDashboard_RendersLatestThreads_FromRemotePartition
rbuergi May 18, 2026
e8869a2
fix(compile): single-flight gate + capped quiesce log; stream-update …
rbuergi May 18, 2026
1a707fc
refactor(ai): production callers route thread mutations through strea…
rbuergi May 18, 2026
7fe36ef
feat(graph): stream-update release trigger via NodeTypeDefinition.Req…
rbuergi May 18, 2026
495b521
fix(graph): single-flight gate on release-request watcher
rbuergi May 18, 2026
79b2d7f
refactor(ai): remove legacy thread mutation handlers; deprecated type…
rbuergi May 18, 2026
b621e65
refactor(pg-mesh-query): consolidate fan-out into the postgres provid…
rbuergi May 18, 2026
13f0976
test(ai-orleans): migrate 19 sites to ThreadSubmission.Submit (produc…
rbuergi May 18, 2026
e321300
refactor(ai): delete deprecated thread mutation request types
rbuergi May 18, 2026
a20023f
docs(ai): rename stale references to deleted thread mutation types
rbuergi May 18, 2026
8ff6a84
fix(ai): restore SubmitMessageRequest handler registration
rbuergi May 18, 2026
d988fcb
fix(ai): ThreadSubmission.Submit posts SubmitMessageRequest again
rbuergi May 18, 2026
585b8d1
fix(user-dashboard): owner detection falls back to CircuitContext + e…
rbuergi May 18, 2026
d9df466
test(ai): skip SubmissionFailure pending UpdateRemote fix
rbuergi May 18, 2026
ac40128
fix(ai-tests): regressions on bug_fix branch CI
rbuergi May 18, 2026
0cf631b
fix(ai): route ApplyResubmit/Delete/RecordFailure through internal tr…
rbuergi May 18, 2026
1fcb951
fix(user-dashboard): capture viewer identity at handler entry + unit …
rbuergi May 18, 2026
7c5f866
fix(ai): ApplyResubmit ensures userMessageId is in UserMessageIds
rbuergi May 18, 2026
fbcfc2f
fix(cross-schema): per-row try/catch around content deserialize + reader
rbuergi May 18, 2026
c314e3d
fix(serialization): AllowOutOfOrderMetadataProperties on hub JSON opt…
rbuergi May 18, 2026
0791658
fix(orleans+graph): stream from owning hub + content-hash assembly paths
rbuergi May 18, 2026
48de6f9
fix(mcp-oauth): serve authorize/token at root so claude.ai discovery …
rbuergi May 18, 2026
5ee5128
fix(cross-schema): push down path: filter so URL resolution returns t…
rbuergi May 18, 2026
2321aef
fix(thread-exec): serialize toolCallLog + responseText mutations acro…
rbuergi May 18, 2026
de113d4
fix(assembly-store): first-write-wins for same (path, version) — Put …
rbuergi May 18, 2026
7b39179
fix(thread-exec): HandleSubmitMessage now populates IngestedMessageId…
rbuergi May 18, 2026
97983e1
fix(test): NodeChange test uses GetMeshNodeStream, not lagging Observ…
rbuergi May 19, 2026
9a0e718
fix(thread-exec): route HandleSubmitMessage through AppendUserInput +…
rbuergi May 19, 2026
8858b4b
fix(compile): ship pendingNode in RunCompileRequest + GUI uses stream…
rbuergi May 19, 2026
160c0d7
fix(query-fanout): register StorageAdapterMeshQueryProvider as additi…
rbuergi May 19, 2026
7b48fe7
chore(logging): demote spammy diagnostic logs from Info to Debug
rbuergi May 19, 2026
70ea4c0
fix(test): LinkedIn — wait for kickoff to settle before triggering re…
rbuergi May 19, 2026
dbb051a
revert: undo HandleSubmitMessage refactor — direct-dispatch is right …
rbuergi May 19, 2026
3d8e1f6
refactor(query): per-item Score on QueryResultChange; MeshQuery sorts…
rbuergi May 19, 2026
aa5c1b1
fix(thread-exec): swallow ObjectDisposedException in cancellation wat…
rbuergi May 19, 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