feat(plan): add large-project decomposition and dependency closure #531

Merged
freemo merged 1 commit from feature/m6-large-decompose into master 2026-03-03 21:49:10 +00:00
Owner

Summary

  • Add hierarchical decomposition with 4+ levels and bounded context per subplan
  • Implement decomposition heuristics (max_files_per_subplan, max_tokens_per_subplan, language/dir clustering)
  • Add dependency closure computation for large graphs and DAG execution ordering
  • Add bounded dependency closure with cutoff thresholds and memoization for 10K+ files
  • Record decomposition decisions in DecisionService (strategy_choice + subplan_spawn entries)

New Modules

Module Lines Purpose
decomposition_models.py ~210 DecompositionConfig, DecompositionNode, DecompositionResult, DependencyEdge, DependencyGraph
decomposition_clustering.py ~200 ClusteringStrategy with directory, language, size clustering + deterministic sort
decomposition_graph.py ~190 DependencyClosureComputer with bounded closure, topological sort, cycle detection, memoization
decomposition_service.py ~290 DecompositionService orchestrating hierarchy building and decision recording

Settings

  • planner_max_depth (default: 4)
  • planner_max_files_per_subplan (default: 500)
  • planner_max_tokens_per_subplan (default: 100000)
  • planner_min_files_per_subplan (default: 10)

Tests

  • 19 Behave BDD scenarios covering all acceptance criteria
  • 6 Robot Framework smoke tests
  • ASV benchmarks for decomposition and closure performance

Quality Gates

  • nox -s lint — passed
  • nox -s typecheck — 0 errors, 0 warnings
  • nox -s unit_tests -- features/large_project_decomposition.feature — 19/19 scenarios passed

Closes #205

## Summary - Add hierarchical decomposition with 4+ levels and bounded context per subplan - Implement decomposition heuristics (max_files_per_subplan, max_tokens_per_subplan, language/dir clustering) - Add dependency closure computation for large graphs and DAG execution ordering - Add bounded dependency closure with cutoff thresholds and memoization for 10K+ files - Record decomposition decisions in DecisionService (strategy_choice + subplan_spawn entries) ## New Modules | Module | Lines | Purpose | |--------|-------|---------| | `decomposition_models.py` | ~210 | DecompositionConfig, DecompositionNode, DecompositionResult, DependencyEdge, DependencyGraph | | `decomposition_clustering.py` | ~200 | ClusteringStrategy with directory, language, size clustering + deterministic sort | | `decomposition_graph.py` | ~190 | DependencyClosureComputer with bounded closure, topological sort, cycle detection, memoization | | `decomposition_service.py` | ~290 | DecompositionService orchestrating hierarchy building and decision recording | ## Settings - `planner_max_depth` (default: 4) - `planner_max_files_per_subplan` (default: 500) - `planner_max_tokens_per_subplan` (default: 100000) - `planner_min_files_per_subplan` (default: 10) ## Tests - 19 Behave BDD scenarios covering all acceptance criteria - 6 Robot Framework smoke tests - ASV benchmarks for decomposition and closure performance ## Quality Gates - `nox -s lint` — passed - `nox -s typecheck` — 0 errors, 0 warnings - `nox -s unit_tests -- features/large_project_decomposition.feature` — 19/19 scenarios passed Closes #205
freemo force-pushed feature/m6-large-decompose from 45e00b16f6
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / build (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 17s
CI / typecheck (pull_request) Successful in 32s
CI / security (pull_request) Successful in 34s
CI / unit_tests (pull_request) Failing after 2m28s
CI / docker (pull_request) Has been skipped
CI / integration_tests (pull_request) Successful in 3m0s
CI / coverage (pull_request) Successful in 4m3s
CI / benchmark-regression (pull_request) Successful in 25m16s
to df163808d7
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 13s
CI / build (pull_request) Successful in 14s
CI / quality (pull_request) Successful in 17s
CI / security (pull_request) Successful in 31s
CI / typecheck (pull_request) Successful in 33s
CI / unit_tests (pull_request) Failing after 2m15s
CI / docker (pull_request) Has been skipped
CI / integration_tests (pull_request) Successful in 3m12s
CI / coverage (pull_request) Successful in 5m6s
CI / benchmark-regression (pull_request) Successful in 26m41s
2026-03-03 18:50:13 +00:00
Compare
freemo scheduled this pull request to auto merge when all checks succeed 2026-03-03 18:50:29 +00:00
freemo force-pushed feature/m6-large-decompose from df163808d7
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 13s
CI / build (pull_request) Successful in 14s
CI / quality (pull_request) Successful in 17s
CI / security (pull_request) Successful in 31s
CI / typecheck (pull_request) Successful in 33s
CI / unit_tests (pull_request) Failing after 2m15s
CI / docker (pull_request) Has been skipped
CI / integration_tests (pull_request) Successful in 3m12s
CI / coverage (pull_request) Successful in 5m6s
CI / benchmark-regression (pull_request) Successful in 26m41s
to f92576e2a6
All checks were successful
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 12s
CI / build (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 17s
CI / typecheck (pull_request) Successful in 31s
CI / security (pull_request) Successful in 44s
CI / integration_tests (pull_request) Successful in 3m8s
CI / coverage (pull_request) Successful in 4m9s
CI / unit_tests (pull_request) Successful in 7m44s
CI / docker (pull_request) Successful in 38s
CI / benchmark-regression (pull_request) Successful in 25m53s
2026-03-03 20:50:42 +00:00
Compare
freemo force-pushed feature/m6-large-decompose from f92576e2a6
All checks were successful
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 12s
CI / build (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 17s
CI / typecheck (pull_request) Successful in 31s
CI / security (pull_request) Successful in 44s
CI / integration_tests (pull_request) Successful in 3m8s
CI / coverage (pull_request) Successful in 4m9s
CI / unit_tests (pull_request) Successful in 7m44s
CI / docker (pull_request) Successful in 38s
CI / benchmark-regression (pull_request) Successful in 25m53s
to 6bcf05efe7
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Failing after 13s
CI / build (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 16s
CI / security (pull_request) Successful in 34s
CI / typecheck (pull_request) Successful in 47s
CI / coverage (pull_request) Has been skipped
CI / benchmark-regression (pull_request) Has been skipped
CI / unit_tests (pull_request) Successful in 2m6s
CI / docker (pull_request) Has been skipped
CI / integration_tests (pull_request) Successful in 2m51s
2026-03-03 21:25:43 +00:00
Compare
freemo scheduled this pull request to auto merge when all checks succeed 2026-03-03 21:26:04 +00:00
freemo force-pushed feature/m6-large-decompose from 6bcf05efe7
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Failing after 13s
CI / build (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 16s
CI / security (pull_request) Successful in 34s
CI / typecheck (pull_request) Successful in 47s
CI / coverage (pull_request) Has been skipped
CI / benchmark-regression (pull_request) Has been skipped
CI / unit_tests (pull_request) Successful in 2m6s
CI / docker (pull_request) Has been skipped
CI / integration_tests (pull_request) Successful in 2m51s
to 4232907ab9
All checks were successful
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 18s
CI / build (pull_request) Successful in 23s
CI / typecheck (pull_request) Successful in 34s
CI / security (pull_request) Successful in 39s
CI / unit_tests (pull_request) Successful in 3m17s
CI / docker (pull_request) Successful in 40s
CI / integration_tests (pull_request) Successful in 4m3s
CI / coverage (pull_request) Successful in 4m9s
CI / lint (push) Successful in 12s
CI / quality (push) Successful in 16s
CI / build (push) Successful in 15s
CI / security (push) Successful in 29s
CI / typecheck (push) Successful in 33s
CI / benchmark-regression (push) Has been skipped
CI / unit_tests (push) Successful in 2m23s
CI / integration_tests (push) Successful in 2m48s
CI / docker (push) Successful in 38s
CI / coverage (push) Successful in 4m16s
CI / benchmark-publish (push) Successful in 16m55s
CI / benchmark-regression (pull_request) Successful in 30m14s
2026-03-03 21:44:24 +00:00
Compare
freemo merged commit 4232907ab9 into master 2026-03-03 21:49:10 +00:00
freemo deleted branch feature/m6-large-decompose 2026-03-03 21:49:10 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cleveragents/cleveragents-core!531
No description provided.