fix(plan-executor): persist strategy decisions during Strategize phase #11138

Open
freemo wants to merge 3 commits from fix/issue-10813-strategize-decision-persistence into master

3 Commits

Author SHA1 Message Date
HAL9000 585c40cdf7 fix(plan_executor): map strategy IDs to DB IDs when persisting decisions
CI / push-validation (pull_request) Successful in 29s
CI / helm (pull_request) Successful in 30s
CI / lint (pull_request) Successful in 49s
CI / build (pull_request) Successful in 39s
CI / tdd_quality_gate (pull_request) Failing after 46s
CI / quality (pull_request) Successful in 1m0s
CI / typecheck (pull_request) Successful in 1m5s
CI / security (pull_request) Successful in 1m6s
CI / integration_tests (pull_request) Failing after 3m1s
CI / e2e_tests (pull_request) Successful in 3m19s
CI / unit_tests (pull_request) Failing after 4m14s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 3s
Build a strategy→DB ID mapping during run_strategize so non-root
decisions reference the correct auto-generated Decision.decision_id
rather than the StrategyDecision's internal ID, ensuring the persisted
tree has correct parent-child relationships.

Also fixes CI failures:
- BDD steps: invalid ULID constants (28 chars/excluded chars), ambiguous
  step aliases, unused imports, f-string without placeholder
- strategize_decision_hook: E501 line-too-long (×4)
- plan_executor: RUF100 unused noqa BLE001

ISSUES CLOSED: #10813
2026-06-11 03:19:57 -04:00
HAL9000 8368681c5b fix: persist strategy decisions via DecisionService during strategize (#10813
CI / helm (pull_request) Successful in 1m5s
CI / lint (pull_request) Failing after 1m35s
CI / build (pull_request) Successful in 1m31s
CI / push-validation (pull_request) Successful in 1m40s
CI / quality (pull_request) Successful in 2m2s
CI / security (pull_request) Successful in 2m7s
CI / tdd_quality_gate (pull_request) Successful in 2m8s
CI / typecheck (pull_request) Successful in 2m16s
CI / unit_tests (pull_request) Failing after 3m7s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / e2e_tests (pull_request) Failing after 5m0s
CI / integration_tests (pull_request) Successful in 5m23s
CI / status-check (pull_request) Failing after 3s
Fix bugs in the StrategizeDecisionHook wiring that prevented proper
decision tree persistence:

- Add parent_decision_id parameter to all four StrategizeDecisionHook
  methods (record_strategy_choice, record_resource_selection,
  record_subplan_spawn, record_invariant_enforced) so each call can
  specify its own tree position. Per-call value overrides the instance
  default for flexible tree construction.

- In PlanExecutor.run_strategize(), pass decision.parent_id from
  StrategizeResult so persisted decisions form a correct parent-child
  hierarchy instead of all having no parent (broken tree).

- Change chosen_option from step_text duplication to "Yes" which is
  semantically correct for stub decisions.

- Add missing step definitions matching Gherkin feature scenarios:
  dp_plan_with_definition, dp_empty_plan, dp_json_still_populated,
  and aliases for common plan definitions.

- Fix feature file template parameters ({decision_count}, {num_steps})
  that were unresolved - replaced with concrete values (2).

All existing behavior preserved as backward-compatible defaults.
2026-05-13 19:45:46 +00:00
CleverAgents c42b989f51 fix(plan-executor): persist strategy decisions during Strategize phase
CI / push-validation (pull_request) Successful in 57s
CI / helm (pull_request) Successful in 59s
CI / build (pull_request) Successful in 1m18s
CI / lint (pull_request) Failing after 1m36s
CI / tdd_quality_gate (pull_request) Successful in 1m31s
CI / quality (pull_request) Successful in 2m3s
CI / security (pull_request) Successful in 2m7s
CI / typecheck (pull_request) Successful in 2m7s
CI / e2e_tests (pull_request) Successful in 4m3s
CI / integration_tests (pull_request) Successful in 7m14s
CI / unit_tests (pull_request) Failing after 10m35s
CI / docker (pull_request) Has been skipped
CI / coverage (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 3s
PlanExecutor.run_strategize() produces StrategyDecision objects but was only
storing them as JSON in plan.error_details["strategy_decisions_json"]. Downstream
CLI commands like "plan tree" and "plan correct" query via DecisionService which
finds an empty tree because decisions are never inserted.

Wire StrategizeDecisionHook into the production execution path so every strategy
decision is persistently recorded during the Strategize phase, while maintaining
the JSON fallback for backward compatibility with _build_decisions.

Co-authored-by: <auto-generated>

ISSUES CLOSED: #10813
2026-05-12 05:22:02 +00:00