fix(ce-plan): close exit gates and honor user-named resources#597
fix(ce-plan): close exit gates and honor user-named resources#597
Conversation
A user asked ce:plan for 3 travel itineraries using the flightgoat-pp-cli. The skill classified it as "travel research, not a software plan" and exited — instead of producing the plan universal-planning was built for. Two compounding gates caused the miss: a "factual lookup" branch in Phase 0.1b and a "quick-help request" branch in universal-planning.md that silently duplicated it. Remove both so the skill commits to planning once it routes to the non-software path. Add Core Principle 8 (Honor user-named resources) so named CLIs, MCPs, URLs, files, or links are treated as authoritative inputs — discovered if unknown, used before generic alternatives, and surfaced explicitly if unavailable rather than silently substituted. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5f3c8db4f8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| Otherwise, read `references/universal-planning.md` and follow that workflow instead. Skip all subsequent phases. Named tools or source links don't change this routing — they're inputs, handled per Core Principle 8. | ||
|
|
||
| If genuinely ambiguous (e.g., "plan a migration" with no other context), ask the user before routing. | ||
|
|
||
| For everything else (quick questions, error messages, factual lookups) **only when auto-selected**, respond directly without any planning workflow. When directly invoked by the user, treat the input as a planning request — ask clarifying questions if needed, but do not exit the workflow. | ||
| If the domain is genuinely ambiguous (e.g., "plan a migration" with no other context), ask the user before routing. |
There was a problem hiding this comment.
Handle ambiguous domains before the catch-all routing
The new Otherwise, read universal-planning... branch is now a catch-all that executes before the explicit ambiguity check, so prompts like "plan a migration" can be routed immediately to non-software planning instead of first asking the user to disambiguate. Because this line also says to skip subsequent phases, it effectively undermines the intended ask before routing safeguard and can misclassify software-adjacent requests; reordering or narrowing the catch-all condition would preserve the ambiguity gate.
Useful? React with 👍 / 👎.
PR #597 reordered Phase 0.1b so the "Otherwise, read universal-planning and skip subsequent phases" branch came before the ambiguity check. That made the ambiguity gate unreachable — prompts like "plan a migration" with no other context now route straight to non-software planning instead of asking the user first. Move the ambiguity check above the catch-all so it still gets to intercept software-adjacent or under-specified requests. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
A user invoked
/ce:planasking for a travel research task involving output from a CLI they had installed. This is classic use case for 'universal planning' mode we previoulsy designed. The skill classified the request as "travel research, not a software plan" and exited with a CLI-execution response rather than producing an itinerary. This goes against theuniversal-planningmode that was built for exactly this kind of non-software planning.The miss came from two compounding exit gates. Phase 0.1b in
SKILL.mdhad a "factual lookup" branch.universal-planning.mdhad a duplicate "quick-help request" branch that silently shadowed it. Refining the wording of one would still leave the other.Changes
Both exit branches are removed. Once the skill routes to non-software planning, it commits to producing a plan. Only software reclassification and pipeline/
disable-model-invocationmode remain as early exits.Core Principle 8 (Honor user-named resources) is added as the single source of truth for named inputs. CLIs, MCP servers, URLs, file paths, doc links, and prior artifacts are treated as authoritative input. Unknown resources are discovered (
command -v, fetch, read) before being assumed unavailable. Named resources are used in place of generic alternatives. If one fails or doesn't exist, the skill says so explicitly rather than silently substituting.Phase 0.1b and the
universal-planning.mdresearch decomposition reference the principle instead of restating it.Why one PR
Closing the gates gets the skill to the research step. The principle makes sure it uses what the user named rather than silently substituting generic web search. Either change alone would leave the other failure mode intact for this class of request.