fix(plan): surface open-questions block + i18n the plan flow#497
Merged
Conversation
…an flow The banner already detected `Open Questions` / `Risks` / `Unknowns` headings but the questions themselves were never shown — PlanConfirm rendered either a step list or a 24-line body cap, both of which can hide the block. Refine mode then reopened a blank input with no echo of the questions, so the user either invented an answer or hit Enter and we asked the model to re-derive its own questions on a follow-up turn. - Extract the matching block (heading down to next same-or-shallower heading) via `extractOpenQuestionsSection` and render it under the banner regardless of steps / body cap. - Forward the extracted block to `PlanRefineInput`, which now renders the questions above the input on `mode === "refine"`. - Replace the blank-refine synthetic that asks the model to re-derive questions with one that tells it to pick safe defaults and call them out. - Move all plan-flow strings (PlanConfirm / PlanRefineInput / PlanCheckpointConfirm / PlanStepList counter line) through `t()` under a new `planFlow` namespace in EN + zh-CN. Closes #477
ChasLui
pushed a commit
to ChasLui/DeepSeek-Reasonix
that referenced
this pull request
May 23, 2026
…an flow (esengine#497) The banner already detected `Open Questions` / `Risks` / `Unknowns` headings but the questions themselves were never shown — PlanConfirm rendered either a step list or a 24-line body cap, both of which can hide the block. Refine mode then reopened a blank input with no echo of the questions, so the user either invented an answer or hit Enter and we asked the model to re-derive its own questions on a follow-up turn. - Extract the matching block (heading down to next same-or-shallower heading) via `extractOpenQuestionsSection` and render it under the banner regardless of steps / body cap. - Forward the extracted block to `PlanRefineInput`, which now renders the questions above the input on `mode === "refine"`. - Replace the blank-refine synthetic that asks the model to re-derive questions with one that tells it to pick safe defaults and call them out. - Move all plan-flow strings (PlanConfirm / PlanRefineInput / PlanCheckpointConfirm / PlanStepList counter line) through `t()` under a new `planFlow` namespace in EN + zh-CN. Closes esengine#477
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The banner in
PlanConfirmalready detectedOpen Questions/Risks/Unknowns/Assumptionsheadings, but the questions themselves were never shown —PlanStepList(when steps were present) and the 24-line body cap (when they weren't) both swallowed the block. Refine then opened a blank input with no echo of what the model raised, so the user either invented an answer or hit Enter and we asked the model to re-derive its own questions on a follow-up turn.This PR makes the questions visible and removes the round-trip:
extractOpenQuestionsSectionutil pulls the matching block (heading down to the next same-or-shallower heading); rendered under the banner regardless ofsteps/ body cap.PlanRefineInput, which now shows it above the input onmode === "refine".PlanConfirm,PlanRefineInput,PlanCheckpointConfirm,PlanStepListcounter) move throught()under a newplanFlownamespace in EN + zh-CN. Plan flow was the last hold-out hardcoded surface; this lands the localization gap the issue called out.Closes #477
Test plan
tests/plan-open-questions.test.ts— 7 cases covering extraction (open block, ends at next heading, nested deeper headings), Chinese headings, case-insensitivity, plurals, and the "literal-word-in-body doesn't false-match" guard.tests/plan-confirm.test.tsx— questions are visible when steps are present and when the body is past the truncation cap.npm run verify(full suite, 2303 tests).