-
Notifications
You must be signed in to change notification settings - Fork 1
Closed
Labels
architectureArchitecture and design decisionsArchitecture and design decisionsenhancementNew feature or requestNew feature or requestpackage:core@exocortex/core package@exocortex/core package
Description
Parent Epic
#2357 — Declarative workflow customization via vault assets
Summary
Create the in-memory WorkflowDefinition model and WorkflowResolver service that loads workflow definitions from the triple store via SPARQL.
What to Do
1. Create WorkflowDefinition model
File: packages/exocortex/src/domain/models/WorkflowDefinition.ts (NEW)
interface WorkflowDefinition {
id: string; // asset UID
name: string; // label
targetClass: AssetClass;
states: WorkflowStateDefinition[];
transitions: WorkflowTransitionDefinition[];
initialState: EffortStatus;
terminalStates: EffortStatus[];
isDefault: boolean;
}
interface WorkflowStateDefinition {
status: EffortStatus;
order: number;
optional: boolean;
timestampOnEnter?: string[];
badgeColor?: string;
}
interface WorkflowTransitionDefinition {
from: EffortStatus;
to: EffortStatus;
label: string;
icon?: string;
isRollback: boolean;
}2. Create WorkflowResolver service
File: packages/exocortex/src/services/WorkflowResolver.ts (NEW)
Responsibilities:
- Execute SPARQL queries against triple store to find workflows
- Build
WorkflowDefinitionfrom query results - Cache resolved definitions (invalidate on workflow asset changes)
- Resolve workflow for a given asset: asset-level → class default → hardcoded fallback
3. SPARQL queries
Implement two key queries:
- Find workflow by
targetClass+isDefault - Load all states and transitions for a given workflow UID
4. Unit tests
- WorkflowDefinition model construction
- WorkflowResolver with mock triple store
- Fallback chain: asset → class default → hardcoded
- Cache invalidation
Acceptance Criteria
Given a triple store containing workflow assets for ems__Project
When WorkflowResolver.resolveForClass(AssetClass.PROJECT) is called
Then a WorkflowDefinition is returned with correct states and transitions
Given an asset with ems__Effort_workflow property
When WorkflowResolver.resolveForAsset(asset) is called
Then the asset-specific workflow is returned (not class default)
Given no workflow assets in triple store
When WorkflowResolver.resolveForClass(AssetClass.PROJECT) is called
Then the hardcoded fallback WorkflowDefinition is returnedAI Guidance
- Look at
SPARQLQueryService.tsfor how to execute SPARQL in the codebase - Use
InMemoryTripleStorepatterns for test setup - Keep WorkflowDefinition immutable (readonly properties)
Estimate
~3 hours
Dependencies
- Blocked by feat(core): Add workflow ontology classes (ems__Workflow, ems__WorkflowState, ems__WorkflowTransition) #2358 (ontology classes must exist first)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
architectureArchitecture and design decisionsArchitecture and design decisionsenhancementNew feature or requestNew feature or requestpackage:core@exocortex/core package@exocortex/core package