src/autoskillit/skills_extended/build-execution-map/SKILL.md
Analyze issue dependencies and produce a dispatch execution map for parallel orchestration
npx skillsauth add talont-org/autoskillit build-execution-mapInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Analyze a set of GitHub issues for dependency relationships using AI-driven pairwise assessment, then produce a structured execution map JSON artifact that partitions issues into dependency-ordered dispatch groups.
parallel request for N ≥ 2 issuesSpace-separated issue numbers (required, minimum 2), plus optional flags:
--base-ref <branch> — base branch to compare against (default: main)--assess-review-approach — assess whether each issue would benefit from a review-approach research pass before implementation (default: inactive)--max-parallel <N> — maximum number of issues in any single parallel group (default: 6). Groups exceeding this cap are split into sequential sub-groups of at most N issues each.Example: 101 103 102 --base-ref main --max-parallel 4 --assess-review-approach
NEVER:
{{AUTOSKILLIT_TEMP}}/build-execution-map/ directory (relative to the current working directory)execution_map or execution_map_report token names with unspaced = (always use key = value format)run_in_background: true is prohibited)ALWAYS:
model: "sonnet" for all subagents{{AUTOSKILLIT_TEMP}}/build-execution-map/execution_map and execution_map_report tokens with absolute paths (use $(pwd) to resolve the working directory prefix)pairwise_assessments for auditabilityAccept issue numbers as space-separated or comma-separated values. Parse --base-ref
if present (default: main). Parse --assess-review-approach if present (default:
inactive). When this flag is active, Step 2 will additionally assess each issue for
review-approach benefit. Parse --max-parallel if present (default: 6). Validate that
it is a positive integer ≥ 1; if a non-positive or non-integer value is provided, abort
with "Error: --max-parallel must be a positive integer". Validate the issue count:
"Error: build-execution-map requires at least 1 issue number" and exit non-zero.parallel: false).Launch up to 8 parallel sonnet subagents, one per issue. Each subagent:
gh issue view {N} --json number,title,body,labels. If the call fails (non-zero
exit — issue not found, auth error, network failure), the subagent must abort and surface
the error; do not return a partial or empty result.{"number": N, "title": "..."} — no structured extraction of
affected_files or depends_on. The issue body is read directly by the parent in Step 2.In the same parallel wave, launch one additional task to fetch the ambient in-progress and queued context:
gh issue list --state open --label "{{github.in_progress_label}}" \
--json number,title,body,labels,updatedAt --limit 50
gh issue list --state open --label "{{github.queued_label}}" \
--json number,title,body,labels,updatedAt --limit 50
Use the config value github.in_progress_label (default: "in-progress") and
github.queued_label (default: "queued") as the label names. Merge both result sets
(deduplicate by issue number) into the ambient context. From the combined list:
github.staged_label,
default: "staged") — staged issues have already landed on the integration branch.If the gh issue list call fails (auth error, network failure), log the error and set the
in-progress context to an empty list — do not abort the skill. An empty in-progress context
is always safe: the skill behaves identically to today.
Do not output any prose between subagent launches — immediately collect results when all subagents complete. All subagents must succeed before advancing to Step 2. If any subagent fails or returns no JSON block, abort the skill with the subagent's error message and the failing issue number.
Read all issue descriptions holistically. For each pair with potential overlap (shared domain, cross-references, related concerns), determine whether the issues can be safely implemented in parallel.
When uncertain, check the actual codebase: read files, inspect structure, use code-index
tools (get_file_summary, get_symbol_body, search_code_advanced) or native Read/Grep.
Produce a per-pair assessment for each pair where a decision is needed:
{
"pair": [1155, 1156],
"parallel_safe": true,
"confidence": "high",
"reasoning": "#1156 modifies _build_l3_orchestrator_prompt() at lines 70-106. #1155 adds new function at end of file. Different symbols, non-adjacent."
}
Constraints:
confidence: "low" requires parallel_safe: false (structural, not advisory)parallel_safe: true; when every pair is obviously independent,
pairwise_assessments is an empty array [] (this is valid output)When the in-progress context set is non-empty, perform a second assessment pass: for each (target issue, in-progress issue) pair, evaluate conflict potential.
Apply a higher tolerance threshold than pairwise assessment — simple file-level overlap
is not sufficient to flag. Target: semantic conflicts, undeclared dependencies, or
architectural tensions where implementing the target issue against the pre-in-progress
codebase will produce incorrect results or wasted effort. Factor updatedAt recency: issues
with no activity in 30+ days carry lower conflict weight — their in-progress label may be
stale.
For each pair that requires assessment, produce:
{
"target_issue": 1155,
"in_progress_issue": 887,
"conflict_severity": "low" | "medium" | "critical",
"conflict_type": "file_overlap" | "semantic_dependency" | "undeclared_dependency" | "architectural_tension",
"reasoning": "one-sentence explanation",
"recommendation": "proceed" | "defer" | "escalate"
}
Severity definitions:
low — Minor file overlap. resolve-merge-conflicts will handle this. Recommendation: proceed. Only record in JSON; suppress from the report to reduce noise.medium — Significant overlap or potential indirect dependency, resolvable. Recommendation: proceed with a warning annotation in the report.critical — Semantic conflict, undeclared dependency, or architectural tension where implementing the target issue now will produce incorrect results or be discarded. Recommendation: defer.When the in-progress context is empty, omit Step 2b entirely — cross_assessments is [].
When --assess-review-approach is active, perform an additional assessment for each issue
after the pairwise parallelism analysis. This assessment determines whether the issue would
meaningfully benefit from a review-approach research pass before implementation.
First, read the review-approach skill definition at
src/autoskillit/skills_extended/review-approach/SKILL.md to ground your understanding of
what that skill actually provides — external web research on modern solutions, approaches,
and trade-offs. Do not rely on a hardcoded heuristic list; use the skill definition as the
primary reference for what review-approach offers.
Then, for each issue, evaluate whether the problem domain would benefit from that research:
Signals that review-approach would benefit:
Signals that review-approach is NOT needed:
These heuristics are illustrative. Use judgment informed by the actual review-approach
SKILL.md to decide each issue.
For each issue, produce:
review_approach_recommended: true if the issue would benefit, false otherwisereview_approach_reasoning: one-sentence explanation of why or why notWhen --assess-review-approach is NOT active, omit these fields entirely from the output.
Using the pairwise assessments from Step 2, partition issues into dispatch groups:
parallel_safe with all other group members go in the same group
(parallel: true)parallel: falseMerge order within parallel groups: determined by which changes are most foundational (the AI decides based on issue content — the issue whose changes are most likely to affect others merges last).
The merge_order list is the flattened sequence of issue numbers across groups in dispatch
order.
After assembling dispatch groups, separate issues flagged as critical in Step 2b:
critical cross-assessment, remove it from
its dispatch group and add it to the deferred_issues array.deferred_count = count of issues in deferred_issuesdispatched_count = total_issues − deferred_counthas_deferred = true if deferred_count > 0, else falsedeferred_issues entry includes blocked_by as an array — a target issue may
have critical conflicts with multiple in-progress issues.When no cross-assessments produce critical severity, this step is a no-op: deferred_issues
is [], has_deferred is false, dispatched_count equals total_issues.
After groups are assembled in Step 3, enforce the max_parallel cap:
For each parallel group (parallel: true) where len(issues) > max_parallel:
max_parallel issues each, preserving
the existing order determined in Step 3.parallel: true if len(sub-list) > 1;
set parallel: false if len(sub-list) == 1 (single-issue groups are never parallel).parallel_safe ordering is preserved — do not re-sort.parallel: false) are never split — they are passed through unchanged
regardless of size.Renumber all groups sequentially (1, 2, 3, …) after splitting. If original Group 1 splits into 2 sub-groups and original Group 2 remains intact, the result is: Group 1 (sub-group A of original Group 1), Group 2 (sub-group B of original Group 1), Group 3 (original Group 2).
Update merge_order to reflect the new group ordering: issues in Group 1 appear before
Group 2, which appears before Group 3, etc. Within each sub-group, the relative order
from Step 3 is preserved.
Update group_count to the total count of groups after splitting.
When no group exceeds max_parallel, this step is a no-op — groups pass through unchanged.
Compute timestamp {YYYY-MM-DD_HHMMSS} (current local time, second precision).
Create the output directory before writing:
mkdir -p "{{AUTOSKILLIT_TEMP}}/build-execution-map"
If directory creation fails (permission error, missing parent), abort with an explicit error message identifying the failed path — do not silently proceed.
Write two files to {{AUTOSKILLIT_TEMP}}/build-execution-map/ (relative to the current
working directory):
execution_map_{YYYY-MM-DD_HHMMSS}.json — full structured artifact (schema below)execution_map_report_{YYYY-MM-DD_HHMMSS}.md — human-readable summary including:
--assess-review-approach is activehas_deferred = true) listing: deferred issue number and title, blocking in-progress
issue number(s) and title(s), conflict type and reasoning, recommendationEmit structured output tokens as the last lines of text output:
execution_map = {absolute_path_to_json}
execution_map_report = {absolute_path_to_report}
group_count = {int}
total_issues = {int}
dispatched_count = {int}
deferred_count = {int}
has_deferred = {true|false}
review_approach_candidates = {comma-separated issue numbers}
Emit dispatched_count, deferred_count, and has_deferred unconditionally (even when
has_deferred = false and deferred_count = 0).
The review_approach_candidates token is conditional: emit it only when
--assess-review-approach is active AND at least one issue has
review_approach_recommended: true. The value is a comma-separated list of issue numbers
(e.g., 1155,1158). When no issues are recommended or the flag is inactive, omit this
token entirely.
This skill writes output files to {{AUTOSKILLIT_TEMP}}/build-execution-map/ and emits
structured output tokens. If context is exhausted mid-execution:
on_context_limit routing handles escalation — do not attempt partial output.{
"generated_at": "ISO-8601",
"base_ref": "main",
"total_issues": 3,
"dispatched_count": 2,
"deferred_count": 1,
"has_deferred": true,
"max_parallel": 6,
"group_count": 1,
"groups": [
{
"group": 1,
"parallel": true,
"issues": [
{"number": 1155, "title": "..."},
{"number": 1156, "title": "..."}
]
}
],
"merge_order": [1155, 1156],
"in_progress_context": [
{"number": 887, "title": "franchise: per-recipe tool-surface test suite"}
],
"pairwise_assessments": [
{
"pair": [1155, 1156],
"parallel_safe": true,
"confidence": "high",
"reasoning": "#1156 modifies _build_l3_orchestrator_prompt() at lines 70-106. #1155 adds new function at end of file. Different symbols, non-adjacent."
}
],
"cross_assessments": [
{
"target_issue": 1158,
"in_progress_issue": 887,
"conflict_severity": "critical",
"conflict_type": "undeclared_dependency",
"reasoning": "...",
"recommendation": "defer"
}
],
"deferred_issues": [
{
"number": 1158,
"title": "...",
"blocked_by": [887],
"reason": "..."
}
]
}
Schema notes:
total_issues counts ALL input issues (backward-compatible — callers expect total_issues == len(input_issues))in_progress_context, cross_assessments, deferred_issues are JSON-body-only — NOT emitted as terminal output tokenshas_deferred, deferred_count, dispatched_count ARE emitted as terminal output tokensWhen --assess-review-approach is active, each issue object gains two additional fields:
{
"number": 1155,
"title": "...",
"review_approach_recommended": true,
"review_approach_reasoning": "Issue proposes a new caching layer with multiple viable strategies. External research would surface current best practices and library maturity."
}
When the flag is inactive, these fields are omitted entirely (not set to defaults).
development
Generate YAML recipes for .autoskillit/recipes/. Use when user says "make script skill", "generate script", "script a workflow", "write a script", "create a script", "new recipe", "write a pipeline", or when loaded by other skills for script formatting.
data-ai
Create Uncertainty Representation visualization planning spec showing error bar definitions, distribution-aware alternatives, and multi-seed variance protocols. Statistical lens answering "How is uncertainty honestly represented?"
data-ai
Create Temporal Dynamics visualization planning spec showing axis scaling (linear vs log), smoothing disclosure, epoch/step alignment, run aggregation (mean + variance bands), early-stopping markers, and wall-clock vs step-count x-axis. Temporal lens answering "Are training dynamics shown clearly and honestly?"
data-ai
Create Narrative Story Arc visualization planning spec showing visual consistency across the report (same color = same model everywhere), logical figure progression, redundant figure detection, and narrative dependency between figures. Narrative lens answering "Do the figures tell a coherent story across the report?"