Reconcile Roadmap (pre-execution, cross-plan)

SkillProductivity

Cross-plan coherence critic for a whole roadmap. Reads roadmap.md plus every planned task's progress-tracker.md and pushes back ONLY on genuine discrepancies BETWEEN the finished plans — broken seams, coverage gaps, duplicated work, reversed/missing edges, terminology drift, conflicting assumptions. Read-only; silent when the plans cohere. Run standalone after planning finishes and before /start-roadmap.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Reconcile Roadmap (pre-execution, cross-plan) skill

What this skill tells your AI

The instructions your AI receives, as published by ayoubben18/ab-method in .agents/skills/reconcile-roadmap/SKILL.md and read by ahel’s review.

Brush across all the finished task plans of a roadmap at once and stress-test that they cohere as a system — that the seams the roadmap's depends-on edges promised are actually honored by the missions on both sides — before /start-roadmap executes anything. This skill produces pushbacks, not suggestions; it never gold-plates plans that already fit together.

Silence is the expected outcome. A set of plans whose seams line up, whose coverage is complete, and whose terms agree gets a one-line "No discrepancies — the plans cohere." Do not manufacture concerns to look thorough.

ALWAYS check .ab-method/structure/index.yaml FIRST for where roadmaps, tasks, and the domain model live — paths are user-configurable, never hardcode them.

Where this sits (and what it is NOT)

Three critics guard a roadmap at three different moments. Keep them distinct:

critique-plan          → ONE plan vs the domain model          (pre-plan / per-task)
reconcile-roadmap      → ALL plans vs EACH OTHER               (pre-execution, whole roadmap)  ← this skill
review-implementation  → one task's diff vs quality critics    (post-implementation)

critique-plan at roadmap time only saw the coarse DAG (one-line task scopes), and each task's own critique-plan only saw that one task's missions. Neither ever reads the whole set of finished progress-tracker.md files together, so discrepancies that only exist between plans slip through to execution. That is exactly the gap this skill closes: it is the pre-execution counterpart of an integration test, run at the plan level.

It is read-only and advisory — it surfaces discrepancies and points at the fix; it never edits a plan, reshapes a task, or blocks a run. It is standalone: invoke it manually (/reconcile-roadmap <name>), typically once planning is done and before /start-roadmap.

Process

1. Identify the roadmap

  • If the user passed a roadmap name or a path to its roadmap.md, use it.
  • Otherwise list folders under docs/roadmaps/ and ask which to reconcile.

2. Load the material

Read (skip missing files silently — don't flag them or offer to create them):

  • roadmap.md — the Objective (the destination), the task list, every depends-on edge (the DAG), and — when present — ## Open decisions, ## Not yet specified (fog), and ## Out of scope.
  • Every planned task's tracker — for each task marked plan: ✅, read docs/tasks/<slug>/progress-tracker.md. Confirm the file actually exists with missions; don't trust the flag alone (same discipline as /start-roadmap).
  • Every planned task's unresolved-questions.md, where one exists — the black boxes those plans intend to ship. Usually absent; when present, it's exactly the kind of assumption that only misbehaves across plans.
  • The domain model that existsUBIQUITOUS_LANGUAGE.md, CONTEXT.md (or CONTEXT-MAP.md
    • per-context src/<context>/CONTEXT.md), docs/adr/, docs/architecture/*. Used to judge terminology and seam ownership, not re-critiqued per plan.

3. Handle partial planning

Reconcile only the planned subset. A roadmap may be partially planned — that's fine.

  • Any task still plan: ⬜ (or whose progress-tracker.md is missing) is reported as "couldn't check."
  • Any seam that touches an unplanned task is flagged unverifiable, not assumed fine — you can't confirm a handoff whose other end doesn't exist yet.

(This mirrors /start-roadmap's tolerance for running a planned prefix.)

4. Spin up ONE read-only reconciler subagent

Spawn a single subagent — reconciler — with the roadmap, all the planned trackers, and the domain-model files from Step 2, and the rule that it is read-only: it returns discrepancies as text and edits nothing. Isolating it keeps the cross-plan analysis out of the main context. (For a very large roadmap you may fan out one reconciler per seam, but the default is one reconciler holding the whole set — the discrepancies live in the relationships between plans, so a single reader sees them best.)

Its brief — fire ONLY on a genuine cross-plan discrepancy, one of:

  1. Broken seam / contract mismatch — Task B depends-on A, and B's missions consume a type / endpoint / table / interface that A's missions never produce, or produce under a different name or shape. The edge promised a handoff the plans don't honor.
  2. Coverage gap — a piece of the roadmap Objective, or a seam implied by an edge, that no task's missions actually implement. Work that falls between tasks.
  3. Overlap / duplication — two tasks plan the same artifact (same file, table, function, endpoint) — a double-build or a merge collision waiting to happen at execution.
  4. Ordering / edge defect — a mission in an upstream task actually needs an artifact only produced downstream (an edge is reversed, or a needed edge is missing). This is grounded in the actual missions, which the roadmap-time critique-plan never saw.
  5. Cross-task terminology drift — the same concept named differently across two tasks' missions (e.g. cancelOrder in one, voidOrder in another), which will fragment the codebase. critique-plan sees one task at a time and structurally cannot catch this.
  6. Conflicting assumptions — two tasks assume incompatible things about a shared entity or contract (soft- vs hard-delete of the same record, sync vs async on the same boundary, differing auth or ownership model).
  7. The map contradicts the plans — the roadmap's own sections have gone stale against the finished trackers. Never fire on fog merely existing (an uncharted area is honest). Fire when: a ## Not yet specified patch is already covered by a planned task's missions (it graduated and nobody cleared it); an ## Out of scope item is implemented by a task's missions (the scope boundary was crossed without redrawing the destination); an ## Open decisions entry blocks a task that is nonetheless plan: ✅ (planned around an unsettled decision — say which missions would change if it resolves the other way); or a ## Decisions line points at an ADR/term that doesn't exist.
  8. Black boxes that leak across tasks — a parked question (⚠️ UQ-n) is a deliberate placeholder within its own task, so never fire on one existing. Fire when it stops being local: a downstream task's missions build real logic on the answer an upstream task left open; two tasks park the same question with different placeholders (the codebase gets two conflicting defaults); or a task's If the answer differs blast radius names work that a different task owns, so answering it later reopens a plan nobody flagged. Do not propose the answer — say which plans collide and that resolving UQ-n before execution is cheaper than after.

For each finding, return: What (the tasks/missions involved), Discrepancy (the exact mismatch, citing both sides — task-slug + the mission on each), Why it matters (the concrete cost at execution, not taste), Suggested resolution.

Example pushback: "Broken seam. checkout-ui (mission 2, "call POST /charges") depends-on charge-api, but charge-api's missions only plan POST /payments — no /charges endpoint is ever produced. At execution checkout-ui will build against a route that doesn't exist. Either rename charge-api's endpoint to /charges, or fix checkout-ui's mission to call /payments — and align the glossary term so both tasks agree."

Out of scope for this critic — do not raise:

  • single-plan domain conflicts (terminology/context/ADR issues within one task) → that's critique-plan,
  • implementation quality, tests, performance, code style → that's post-implementation review-implementation,
  • reshaping or re-scoping tasks → that's /create-task / /extend-task.

With nothing anchored across the plans, the reconciler returns exactly: No discrepancies — the plans cohere.

5. Surface findings — advisory, never blocking

Bring the pushbacks back into the session. The user resolves each their way:

  • Amend a tracker — add or fix a mission so the seam is honored (via /extend-task, or inline in that task's progress-tracker.md).
  • Redraw an edge in roadmap.md — add, remove, or reverse a depends-on so ordering matches what the missions actually need.
  • Rename to the canonical term across the affected trackers so both tasks speak one language.
  • Dismiss → drop it. If the dismissal rests on a load-bearing reason a future reader would need in order not to re-raise it, offer to record an ADR (../domain-model/ADR-FORMAT.md). Skip ephemeral ("not now") and self-evident reasons.

Also report the "couldn't check" list from Step 3 (unplanned tasks and unverifiable seams) so the user knows the reconciliation's coverage, not just its findings.

If the reconciler returned "No discrepancies," say so in one line (plus the couldn't-check list if any) and stop. Don't pad it.

Key Principles

  • Cross-plan, not single-plan — the discrepancies live in the relationships between finished plans; that's the whole reason this skill exists alongside critique-plan.
  • Silent by default — coherent plans get one line; never invent concerns.
  • Read-only and advisory — surfaces and points at the fix; the user resolves. It never edits a plan or blocks a run.
  • Standalone — invoked manually, typically after planning and before /start-roadmap; not auto-wired into any workflow.
  • Reconcile what's planned — a partial roadmap is fine; report what couldn't be checked rather than assuming unplanned seams are sound.

Remember

  • Check .ab-method/structure/index.yaml for paths and the relationships map.
  • Confirm each plan: ✅ task's progress-tracker.md truly exists with missions — don't trust the flag alone.
  • Roadmaps and tasks are referenced by slug; tasks live in the normal docs/tasks/<slug>/.

Signals

GitHub stars
190
Forks
14
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
reconcile-roadmap
Source
github.com/ayoubben18/ab-method