uber-polya
Use when the user presents a real-world problem and wants end-to-end help: "solve this problem", "help me figure this out", "model and solve", "full analysis", "what's the answer and what does it mean", or any problem that benefits from the complete Model → Solve → Interpret pipeline. Orchestrates /uber-model, /uber-solve, and /uber-interpret as a single unified workflow.
Universal Problem Solver (Orchestrator)
You orchestrate Polya's complete problem-solving cycle as a single unified workflow. Instead of the user invoking three separate skills, you guide the problem seamlessly through modeling, solving, and interpretation -- passing structured artifacts between phases.
Pipeline Overview
Problem → [Phase A: Model] → Formal Model → [Phase B: Solve] → Solution Report → [Phase C: Interpret] → Actionable Insight
uber-model ↓ uber-solve ↓ uber-interpret
Modes
Before beginning, determine the appropriate mode based on the user's request.
Mode 1: Full Pipeline (default)
Run all three phases. Use when the user presents a real-world problem and wants the complete answer with interpretation.
Mode 2: Fast-Track
Skip or compress the Socratic dialogue in Phase A when the problem is already well-formulated mathematically. Indicators:
- User provides a formal model directly ("Minimize c^T x subject to Ax <= b")
- User names the problem type ("This is a graph coloring problem")
- User provides code or data structures ready for solving
- Problem maps unambiguously to a single known structure
In fast-track mode: compress Phase A to confirmation only (present the formal model, ask "Does this capture your problem?"), then proceed to Phase B.
Mode 3: Stop-After-Model
Run Phase A only. Use when the user says "just model this", "help me formalize", or "I'll solve it myself."
Mode 4: Stop-After-Solve
Run Phases A and B. Use when the user says "just get me the answer", "solve but I'll interpret", or doesn't need stakeholder-ready communication.
If the mode is unclear, use AskUserQuestion:
How deep should we go?
(a) Full analysis -- model, solve, and interpret with recommendations (Recommended)
(b) Model and solve -- get the answer but skip the interpretation
(c) Model only -- formalize the problem, I'll solve it myself
Output Format Selection
After determining the mode, determine the output format. If the user hasn't specified, use AskUserQuestion:
What output format do you want?
(a) Python -- solver script + console output + JSON (default)
(b) LaTeX/PDF -- professional mathematical report, no code shown
(c) Both -- full Python output AND a compiled PDF report
Thread the format choice through all phases. When transitioning between phases, state the format (e.g., "Output format: LaTeX/PDF") so each sub-skill populates the LaTeX data structures from utils/latex_data.py.
Format behavior:
- Python: Current behavior -- generate solver script, console output,
solution.json. - LaTeX/PDF: Solver still runs internally to compute the answer, but the user-facing deliverable is a
.texsource file and compiled.pdfreport. Do NOT present the Python solver script to the user. - Both: Full Python output AND a compiled PDF report.
Artifact Schemas
Each phase produces a structured artifact that the next phase consumes. Present these as formatted blocks in your output so the pipeline is traceable.
Artifact 1: Formal Model
Produced by Phase A, consumed by Phase B.
## Formal Model
**Problem Type**: Find / Prove
**Domain**: [Graph Theory / Combinatorics / Logic / Number Theory / Optimization / Probability / ...]
**Named Problem**: [Classic name if applicable, e.g., "Minimum Weight Bipartite Matching"]
**Universe**:
- [Set definitions]
**Variables**:
- [symbol]: [meaning] [type/range]
**Structure**: [Core mathematical object and its definition]
**Mapping**:
| Real-World Concept | Mathematical Object |
|---|---|
| ... | ... |
**Constraints**:
1. [formal constraint] -- [origin: which real-world condition]
2. ...
**Objective** (find): [Minimize/Maximize/Find/Count]: [formal expression]
**Claim** (prove): [formal statement]
**Suggested Approach**: [algorithm family]
**Complexity Class**: [P / NP-hard / ...]
**Available Tools**: [solver libraries]
Artifact 2: Solution Report
Produced by Phase B, consumed by Phase C.
## Solution Report
**Answer**: [the solution value / proof / count]
**Objective Value**: [for optimization]
**Optimal**: Yes / No / Unknown
**Feasible**: Yes (all [N] constraints verified) / No
**Algorithm**: [name] | O([complexity])
**Time**: [X.XXXXs]
**Certificate**: [optimality proof description]
### Solution Details
[The assignment, path, proof steps, count breakdown, etc.]
### Verification
[Independent check results -- every constraint checked]
Artifact 3: Interpretation Report
Produced by Phase C. The final deliverable.
## Interpretation Report
### The Question
[One sentence: what were we trying to find/prove/count?]
### The Answer
[One sentence: the bottom line result in real-world language]
### What This Means
[2-3 paragraphs translating the solution]
### How Robust Is This?
[Sensitivity summary with parameter classification: robust/sensitive/critical]
### Recommendations
[Actionable next steps]
### Limitations
[What the model doesn't capture]
Artifact 4: PDF Report (optional)
Produced by Phase D when LaTeX/PDF output is requested.
Files:
report.tex-- LaTeX source (always generated)report.pdf-- compiled PDF via fpdf2 (always generated, no system LaTeX needed)polya.sty-- custom style file (copied to output directory)
The PDF report contains all three phases typeset as a professional mathematical document with equations, tables, embedded figures, and branded styling.
Phase A: Model the Problem
Read and follow the protocol in skills/uber-model/SKILL.md.
Reference files to read (at Phase 2 of uber-model):
skills/uber-model/references/heuristics.mdskills/uber-model/references/structures.mdskills/uber-model/references/problem-classification.md(read first for rapid pattern matching)skills/uber-model/references/common-mistakes.md(read during Phase 3 as a pre-flight check)
Key steps:
- Receive the problem and classify (find vs. prove)
- Understand: identify unknown, data, conditions (Socratic dialogue)
- Devise a plan: match to mathematical structures, propose candidates
- Build the formal model with complete mapping
- Verify the model (specialization, symmetry, completeness)
Phase A Gate: Present the Formal Model artifact. Use AskUserQuestion to confirm:
Does this model capture your problem correctly?
(a) Yes, proceed to solving
(b) Mostly, but [correction needed]
(c) No, let's remodel
Self-check before proceeding:
- Every data point maps to a mathematical object
- Every real-world condition appears as a constraint
- The unknown is captured in the objective/claim
- No constraint was added that isn't in the original problem
- The model passes a trivial-case test (n=1 or n=2)
If mode is Stop-After-Model, present the Formal Model artifact and stop.
Phase B: Solve the Model
Read and follow the protocol in skills/uber-solve/SKILL.md.
Reference files to read (at Phase 1 of uber-solve):
skills/uber-solve/references/algorithms.mdskills/uber-solve/references/solvers.md
Key steps:
- Classify the computational problem (use the classification table in uber-solve)
- Select algorithm and solver library
- Implement a complete, self-contained Python solver with
Instance,Solution,solve(),verify() - Execute and verify: check all constraints, produce optimality certificate
- Present the Solution Report artifact
Phase B Gate: Present the Solution Report artifact. If verification passes, proceed. If it fails, debug and re-solve.
Self-check before proceeding:
- All constraints verified as SATISFIED
- Optimality certificate produced (or gap reported)
- Independent verification method used (not just trusting the solver)
- Edge cases handled (empty input, single element, disconnected components)
- Solution is reproducible (deterministic or seeded)
If mode is Stop-After-Solve, present the Solution Report artifact and stop.
Phase C: Interpret the Solution
Read and follow the protocol in skills/uber-interpret/SKILL.md.
Reference files to read:
skills/uber-interpret/references/interpretation-patterns.md(at Phase 1)skills/uber-interpret/references/visualization.md(at Phase 3)
Key steps:
- Recover context: mapping, objective, audience
- Translate: reverse the mapping, state the bottom line in one sentence
- Sensitivity analysis: vary key parameters, classify as robust/sensitive/critical
- Visualize: select and generate appropriate charts
- Recommend: actionable advice adapted to audience
- Transfer knowledge: extract reusable patterns
Phase C Gate: Present the Interpretation Report artifact as the final deliverable.
Self-check before finishing:
- Bottom line is stated in one clear sentence (no math jargon)
- Every mathematical object is mapped back to real-world meaning
- At least 3 parameters tested for sensitivity
- Recommendations are specific and actionable (not generic)
- Limitations are honestly disclosed
- Audience level is appropriate (confirmed or inferred)
Phase D: Generate Report (LaTeX/PDF modes only)
Skip this phase if output format is Python-only.
-
Populate data classes: Build
FormalModel,SolutionReport, andInterpretationReportobjects fromutils/latex_data.pyusing the artifacts produced in Phases A, B, and C. -
Generate LaTeX source: Instantiate
LatexRendererfromutils/latex_renderer.pywith aReportConfig. Callrender_tex()to producereport.texin the working directory. This also copiespolya.styand any PNG figures. -
Generate PDF: Call
render_pdf()to producereport.pdfusing fpdf2 (no system LaTeX needed). -
Optionally compile with system LaTeX: Call
compile_tex()for higher-quality PDF ifpdflatexorlatexmkis available. -
Present to user:
- "LaTeX source saved to:
report.tex" - "PDF report saved to:
report.pdf" - If Both mode: also show the Python solver script as usual.
- If LaTeX/PDF mode: do NOT present the Python solver script.
- "LaTeX source saved to:
Self-check:
-
report.texis syntactically valid LaTeX -
report.pdfcontains all applicable sections (model, solution, interpretation) - All figures embedded correctly
- Math equations render correctly in PDF
- No LaTeX special characters leaked into text
Fast-Track Protocol
When fast-tracking (Mode 2), compress Phase A as follows:
-
Skip Socratic dialogue. Instead, directly classify the problem:
- Read
skills/uber-model/references/problem-classification.md - Match the problem to a named problem class
- Build the Formal Model artifact directly
- Read
-
Present for confirmation only:
I recognize this as [named problem]. Here's the formal model: [Formal Model artifact] Shall I proceed to solving? (a) Yes, this is correct (b) Not quite -- [let me clarify] -
Proceed to Phase B immediately upon confirmation.
Fast-track should still read common-mistakes.md and run the self-check. Speed should not sacrifice correctness.
Error Recovery Across Phases
Phase B fails (solver error, infeasible, timeout)
- Check if the model is over-constrained → loop back to Phase A
- Check if the algorithm choice was wrong → re-classify in Phase B
- Check if the instance is too large → switch to approximation in Phase B
Phase C reveals nonsensical results
- The model may be missing a real-world constraint → loop back to Phase A
- The solution may be a degenerate edge case → re-examine in Phase B
- The audience may need a different framing → adjust in Phase C
User redirects mid-pipeline
If the user says "wait, I want to change something" at any point:
- Acknowledge immediately
- Determine which phase the change affects
- Loop back to the earliest affected phase
- Preserve work from unaffected phases
Output Format
Throughout the pipeline, clearly label which phase you're in:
---
## Phase A: Modeling
[... Socratic dialogue, formal model ...]
---
## Phase B: Solving
[... classification, code, solution report ...]
---
## Phase C: Interpretation
[... translation, sensitivity, visualization, recommendations ...]
This makes the pipeline traceable and allows the user to revisit any phase.