0c6ac903b7
Adds task tracking as a first-class event-sourced aggregate (ADR-0012). The
event log stays the only source of truth; the board is a projection, and all of
a project's task events live in one stream (tasks:<projectId>).
core:
- new core:tasks module mirroring core:sessions: TaskStatus/State/Reducer/
BoardProjector/CounterProjection/Repository + TaskService write path that
appends events via the existing EventStore (no new storage)
- task events in core:events (sealed marker TaskEvent), registered in
Serialization.kt; status is derived by the reducer from lifecycle facts
- work-graph edges: TaskLinkType + typed TaskTargetKind on the link, so bundle
resolution dispatches on the recorded kind instead of guessing from the id
- delete is a soft tombstone (TaskDeletedEvent); cancel stays a visible outcome
surfaces:
- agent tools (Tier T2 mutators, T1 read): task_create / task_update /
task_delete / task_context, registered in both the main and per-workspace
tool registries
- REST GET /tasks/{id}/context for external agents
context bundle (TaskContextAssembler):
- task fields + acceptance criteria + relevant files + resolved dependency
tasks (live status) + raw related links + notes, with a compact render()
- semantic enrichment via a TaskKnowledgeRetriever port bridged to the existing
L3 retriever (late-bound holder for composition-root ordering)
- ADR/doc resolution via a TaskDocumentResolver port + filesystem adapter
(docs/decisions/adr-*.md, padding-agnostic; *.md paths)
Unit-verified across core:tasks / infrastructure:tools / apps:server; full
gradlew check green. Not yet live-QA'd end-to-end against a running server.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
70 lines
2.8 KiB
Groovy
70 lines
2.8 KiB
Groovy
plugins {
|
|
id 'org.jetbrains.kotlin.jvm'
|
|
id 'org.jetbrains.kotlin.plugin.serialization'
|
|
id 'application'
|
|
}
|
|
|
|
application {
|
|
mainClass = 'com.correx.apps.server.MainKt'
|
|
}
|
|
|
|
tasks.named('distTar') {
|
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
}
|
|
tasks.named('distZip') {
|
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
}
|
|
|
|
dependencies {
|
|
implementation project(':core:config')
|
|
implementation project(':core:events')
|
|
implementation project(':core:approvals')
|
|
implementation project(':core:sessions')
|
|
implementation project(':core:tasks')
|
|
implementation project(':core:kernel')
|
|
implementation project(':core:journal')
|
|
implementation project(':core:inference')
|
|
implementation project(':core:transitions')
|
|
implementation project(':core:context')
|
|
implementation project(':core:validation')
|
|
implementation project(':core:risk')
|
|
implementation project(':core:artifacts')
|
|
implementation project(':core:artifacts-store')
|
|
implementation project(':infrastructure')
|
|
implementation project(':infrastructure:artifacts-cas')
|
|
implementation project(':infrastructure:workflow')
|
|
implementation project(':infrastructure:persistence')
|
|
implementation project(':infrastructure:inference')
|
|
implementation project(':infrastructure:inference:llama_cpp')
|
|
implementation project(':infrastructure:inference:commons')
|
|
implementation project(':core:router')
|
|
implementation project(':core:tools')
|
|
implementation project(':core:toolintent')
|
|
implementation project(':infrastructure:tools')
|
|
implementation project(':infrastructure:tools:filesystem')
|
|
|
|
implementation "com.github.ajalt.clikt:clikt:5.0.1"
|
|
|
|
implementation "io.ktor:ktor-client-cio:$ktor_version"
|
|
implementation "io.ktor:ktor-client-logging:$ktor_version"
|
|
implementation "io.ktor:ktor-server-core:$ktor_version"
|
|
implementation "io.ktor:ktor-server-netty:$ktor_version"
|
|
implementation "io.ktor:ktor-server-websockets:$ktor_version"
|
|
implementation "io.ktor:ktor-server-content-negotiation:$ktor_version"
|
|
implementation "io.ktor:ktor-serialization-kotlinx-json:$ktor_version"
|
|
implementation "io.ktor:ktor-server-status-pages:$ktor_version"
|
|
implementation "io.ktor:ktor-server-call-logging:$ktor_version"
|
|
|
|
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlinx_coroutines_version"
|
|
testImplementation "io.ktor:ktor-server-test-host:$ktor_version"
|
|
testImplementation "io.ktor:ktor-client-websockets:$ktor_version"
|
|
testImplementation "io.ktor:ktor-client-mock:$ktor_version"
|
|
|
|
implementation "org.apache.logging.log4j:log4j-core:2.24.1"
|
|
implementation "org.apache.logging.log4j:log4j-slf4j2-impl:2.24.1"
|
|
implementation "org.slf4j:slf4j-api:2.0.16"
|
|
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.9.0"
|
|
}
|
|
|
|
tasks.named("koverVerify").configure { enabled = false }
|