You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
src/workflow/Aevatar.Workflow.Infrastructure/Workflows/FileBackedWorkflowCatalogPort.cs:78-80:_cacheLock、_workflowFileDiscoveryCache、_parsedWorkflowCache on singleton port
src/workflow/Aevatar.Workflow.Infrastructure/Workflows/FileBackedWorkflowCatalogPort.cs:457-566:从目录 discover files + mutate process caches under lock (_cacheLock)
src/workflow/Aevatar.Workflow.Infrastructure/DependencyInjection/ServiceCollectionExtensions.cs:40-44:registers infrastructure singleton as both IWorkflowCatalogPort and IWorkflowCapabilitiesPort
src/workflow/Aevatar.Workflow.Application/Queries/WorkflowExecutionQueryApplicationService.cs:12-20:injects those query ports as application read surface
Fix Boundary
Keep scope to workflow catalog/capabilities read path。Do NOT add new authoring features or change DSL semantics:
Replace FileBackedWorkflowCatalogPort as online query source with materialized workflow catalog/capabilities readmodel
Move file discovery/import into explicit startup activation, catalog actor command, or projection materializer(this decision needs maintainer input — ownership contract change)
Query app service should read versioned/freshness-bearing document, not enumerate files or parse YAML in request path
Remove process-local_workflowFileDiscoveryCache, _parsedWorkflowCache, _cacheLock from online query port
Workflow catalog 查询现场扫文件并缓存业务事实
一段话说清楚
现在 workflow catalog/capabilities 查询不是读取已经物化好的目录视图,而是在查询方法里现场扫目录、读 YAML、解析 workflow,再用单例内存缓存结果。同一个查询结果取决于当前进程看到的文件系统和本地缓存,而不是 actor 或 projection 已提交的事实。
多实例部署时不同进程可能看到不同目录、不同缓存水位,接口还会返回一个本地生成时间(
GeneratedAtUtc = DateTimeOffset.UtcNow),让调用方误以为这是权威刷新时间。Workflow definition 的事实来源变成"谁刚好处理了这次查询"。违反:
Evidence
src/workflow/Aevatar.Workflow.Infrastructure/Workflows/FileBackedWorkflowCatalogPort.cs:78-80:_cacheLock、_workflowFileDiscoveryCache、_parsedWorkflowCacheon singleton portsrc/workflow/Aevatar.Workflow.Infrastructure/Workflows/FileBackedWorkflowCatalogPort.cs:92-151:ListWorkflowCatalog/GetWorkflowDetail/GetCapabilities现场 discover files / read registry YAML / parse definitions / load connector configsrc/workflow/Aevatar.Workflow.Infrastructure/Workflows/FileBackedWorkflowCatalogPort.cs:457-566:从目录 discover files + mutate process caches underlock (_cacheLock)src/workflow/Aevatar.Workflow.Infrastructure/DependencyInjection/ServiceCollectionExtensions.cs:40-44:registers infrastructure singleton as bothIWorkflowCatalogPortandIWorkflowCapabilitiesPortsrc/workflow/Aevatar.Workflow.Application/Queries/WorkflowExecutionQueryApplicationService.cs:12-20:injects those query ports as application read surfaceFix Boundary
Keep scope to workflow catalog/capabilities read path。Do NOT add new authoring features or change DSL semantics:
FileBackedWorkflowCatalogPortas online query source with materialized workflow catalog/capabilities readmodel_workflowFileDiscoveryCache,_parsedWorkflowCache,_cacheLockfrom online query portDirectory.EnumerateFiles,_parser.Parse,AevatarConnectorConfig.LoadConnectors()reappearing inside workflow query ports为什么需要 design 决策
修复不是机械改名,需要决定 file-backed workflow 的权威事实拥有者:
WorkflowGAgent拥有 definition facts(docs 现有说法)?WorkflowCatalogActor(新 actor — 可能命中 hardcoded trigger Feature/cqrs projection suite #2)?需要回答的问题
加
auto-loop-resume前请回答:WorkflowGAgentper-definition /WorkflowCatalogActoraggregate(新 actor 警告)/ startup materializer / projection-driven?Auto-loop 行为
phase9-auto-solve;maintainer 评论 RESET round;auto-loop-resume = 最新评论作 design decision。
📢 cc 原作者
@loning @eanzhao
⟦AI:AUTO-LOOP⟧