Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,69 @@ flaky-result = "fail"
slow-timeout = { period = "10s", terminate-after = 36 }
final-status-level = "slow"

[test-groups]
windows-dashboard-server = { max-threads = 2 }
windows-tracedecay-init = { max-threads = 1 }
windows-init-heavy = { max-threads = 4 }
windows-profile-storage = { max-threads = 1 }
windows-session-sqlite = { max-threads = 8 }
windows-process-heavy = { max-threads = 2 }
windows-subprocess = { max-threads = 1 }
windows-memory-eval = { max-threads = 1 }
windows-timing-sensitive = { max-threads = 1 }

[[profile.ci.overrides]]
filter = 'all()'
platform = { host = 'cfg(windows)' }
retries = 2
flaky-result = 'pass'

[[profile.ci.overrides]]
filter = 'binary(=dashboard_api_test) | binary(=dashboard_analytics_api_test) | binary(=dashboard_automation_api_test) | binary(=dashboard_automation_config_api_test) | binary(=dashboard_automation_skills_api_test) | binary(=dashboard_code_diagnostics_api_test) | binary(=dashboard_graph_api_test) | binary(=dashboard_lcm_api_test) | binary(=dashboard_lcm_fixes_test) | binary(=dashboard_memory_curation_api_test) | binary(=dashboard_savings_api_test)'
platform = { host = 'cfg(windows)' }
test-group = 'windows-dashboard-server'

[[profile.ci.overrides]]
filter = 'binary(=agent_test) | binary(=branch_db_safety_test) | binary(=cli_non_interactive_test) | binary(=mcp_cli_serve_test)'
platform = { host = 'cfg(windows)' }
test-group = 'windows-tracedecay-init'

[[profile.ci.overrides]]
filter = 'binary(=automation_memory_curator_runner_test) | binary(=automation_runner_test) | binary(=automation_session_reflector_runner_test) | binary(=automation_skill_writer_runner_test) | binary(=branch_drift_test) | binary(=integration_test) | binary(=regression_core_engine_test) | binary(=tracedecay_test)'
platform = { host = 'cfg(windows)' }
test-group = 'windows-init-heavy'

[[profile.ci.overrides]]
filter = 'binary(=storage_resolver_test) | binary(=profile_storage_migration_test) | binary(=cursor_transcript_ingest_test)'
platform = { host = 'cfg(windows)' }
test-group = 'windows-profile-storage'

[[profile.ci.overrides]]
filter = 'binary(=session_lcm_compression_test) | binary(=session_lcm_query_test) | binary(=session_lcm_payload_test) | binary(=session_global_db_test) | binary(=session_transcript_backfill_test) | binary(=codex_transcript_ingest_test) | binary(=hermes_transcript_ingest_test) | binary(=cline_like_transcript_ingest_test) | binary(=corruption_test) | binary(=db_query_test) | binary(=mcp_handler_test) | binary(=mcp_server_test) | binary(=memory_test) | binary(=multi_mcp_coordination_test)'
platform = { host = 'cfg(windows)' }
test-group = 'windows-session-sqlite'

[[profile.ci.overrides]]
filter = 'binary(=tool_first_touch_test) | binary(=lsp_code_diagnostics_test) | binary(=mcp_dashboard_tool_test) | binary(=extract_worker_test)'
platform = { host = 'cfg(windows)' }
test-group = 'windows-process-heavy'

[[profile.ci.overrides]]
filter = 'binary(=automation_backend_test)'
platform = { host = 'cfg(windows)' }
test-group = 'windows-subprocess'

[[profile.ci.overrides]]
filter = 'binary(=memory_eval_test)'
platform = { host = 'cfg(windows)' }
test-group = 'windows-memory-eval'

[[profile.ci.overrides]]
filter = 'binary(=cli_non_interactive_test) | binary(=cursor_transcript_ingest_test) | binary(=memory_eval_test) | test(=curation_agent_plan_skips_when_automation_is_disabled_and_records_history) | test(=daily_model_series_limits_days_not_model_rows) | test(=memory_fact_store_update_trust_delta_uses_direct_fact_lookup)'
platform = { host = 'cfg(windows)' }
threads-required = "num-test-threads"

[[profile.ci.overrides]]
filter = 'test(=dead_code_marker_resolve_is_single_pass)'
platform = { host = 'cfg(windows)' }
test-group = 'windows-timing-sensitive'
76 changes: 74 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ jobs:
- windows-runner
env:
RUSTC_WRAPPER: sccache
SCCACHE_GHA_ENABLED: "true"
SCCACHE_WEBDAV_ENDPOINT: http://10.10.10.20:8080/cache
SCCACHE_WEBDAV_KEY_PREFIX: tracedecay/windows-msvc
steps:
- uses: actions/checkout@v7

Expand Down Expand Up @@ -158,8 +159,77 @@ jobs:
"Windows Rust cache hit: ${{ steps.windows-rust-cache.outputs.cache-hit }}" | Out-File -FilePath $env:GITHUB_STEP_SUMMARY -Encoding utf8 -Append
"Windows Rust cache matched key: ${{ steps.windows-rust-cache.outputs.cache-matched-key }}" | Out-File -FilePath $env:GITHUB_STEP_SUMMARY -Encoding utf8 -Append

- name: Reset sccache daemon
shell: pwsh
run: |
if ($env:SCCACHE_PATH -and (Test-Path $env:SCCACHE_PATH)) {
& $env:SCCACHE_PATH --stop-server
} elseif (Get-Command sccache -ErrorAction SilentlyContinue) {
sccache --stop-server
} else {
Write-Host "sccache was not installed; skipping daemon reset"
}
exit 0

- name: Clean stale Windows test processes
shell: pwsh
run: |
$workspace = (Resolve-Path $env:GITHUB_WORKSPACE).Path
$repoWorkPath = "\_work\tracedecay\tracedecay"
$all = Get-CimInstance Win32_Process
$stale = foreach ($process in $all) {
if ($process.Name -notin @("tracedecay.exe", "cargo.exe", "cargo-nextest.exe", "rustc.exe", "link.exe", "sccache.exe")) {
continue
}
if (-not $process.CommandLine) {
continue
}
$inCurrentWorkspace = $process.CommandLine.IndexOf($workspace, [StringComparison]::OrdinalIgnoreCase) -ge 0
$inRepoWorktree = $process.CommandLine.IndexOf($repoWorkPath, [StringComparison]::OrdinalIgnoreCase) -ge 0
if (-not $inCurrentWorkspace -and -not $inRepoWorktree) {
continue
}
$parent = $all | Where-Object { $_.ProcessId -eq $process.ParentProcessId }
if (-not $parent) {
$process
}
}
foreach ($process in $stale) {
Write-Host "Stopping stale process $($process.Name) pid=$($process.ProcessId)"
Stop-Process -Id $process.ProcessId -Force -ErrorAction SilentlyContinue
}

- name: Run Windows tests
run: cargo nextest run --workspace --profile ci
run: cargo nextest run --workspace --profile ci --test-threads 32

- name: Clean abandoned Windows test children
if: always()
shell: pwsh
run: |
$workspace = (Resolve-Path $env:GITHUB_WORKSPACE).Path
$repoWorkPath = "\_work\tracedecay\tracedecay"
$all = Get-CimInstance Win32_Process
$stale = foreach ($process in $all) {
if ($process.Name -ne "tracedecay.exe") {
continue
}
if (-not $process.CommandLine) {
continue
}
$inCurrentWorkspace = $process.CommandLine.IndexOf($workspace, [StringComparison]::OrdinalIgnoreCase) -ge 0
$inRepoWorktree = $process.CommandLine.IndexOf($repoWorkPath, [StringComparison]::OrdinalIgnoreCase) -ge 0
if (-not $inCurrentWorkspace -and -not $inRepoWorktree) {
continue
}
$parent = $all | Where-Object { $_.ProcessId -eq $process.ParentProcessId }
if (-not $parent) {
$process
}
}
foreach ($process in $stale) {
Write-Host "Stopping abandoned tracedecay child pid=$($process.ProcessId)"
Stop-Process -Id $process.ProcessId -Force -ErrorAction SilentlyContinue
}

- name: Save Windows Rust cache
if: steps.windows-rust-cache.outputs.cache-hit != 'true'
Expand All @@ -177,6 +247,8 @@ jobs:
run: |
if ($env:SCCACHE_PATH -and (Test-Path $env:SCCACHE_PATH)) {
& $env:SCCACHE_PATH --show-stats
} elseif (Get-Command sccache -ErrorAction SilentlyContinue) {
sccache --show-stats
} else {
Write-Host "sccache was not installed; skipping stats"
}
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.0.17](https://github.com/ScriptedAlchemy/tracedecay/compare/v0.0.16...v0.0.17) - 2026-06-29

### Other

- Add TraceDecay registry, LCM, and transcript audit improvements ([#142](https://github.com/ScriptedAlchemy/tracedecay/pull/142))

## [0.0.16](https://github.com/ScriptedAlchemy/tracedecay/compare/v0.0.15...v0.0.16) - 2026-06-29

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "tracedecay"
version = "0.0.16"
version = "0.0.17"
edition = "2021"
description = "Code intelligence tool that builds a semantic knowledge graph from Rust, Go, Java, Scala, TypeScript, Python, C, C++, Kotlin, C#, Swift, and many more codebases"
license = "MIT"
Expand Down
Loading