get-shit-done/workflows/import.md
External plan ingestion with conflict detection and agent delegation.
Future: --prd mode (PRD extraction into PROJECT.md + REQUIREMENTS.md + ROADMAP.md) is planned for a follow-up PR.
Display the stage banner:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► IMPORT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Parse $ARGUMENTS to determine the execution mode:
--from is present: extract FILEPATH (the next token after --from), set MODE=plan--prd is present: display message that --prd is not yet implemented and exit:
GSD > --prd mode is planned for a future release. Use --from to import plan files.
Usage: /gsd-import --from <path>
--from <path> Import an external plan file into GSD format
Validate the file path:
Verify the path does not contain traversal sequences and the file exists:
case "{FILEPATH}" in
*..* ) echo "SECURITY_ERROR: path contains traversal sequence"; exit 1 ;;
esac
test -f "{FILEPATH}" || echo "FILE_NOT_FOUND"
If FILE_NOT_FOUND: display error and exit:
╔══════════════════════════════════════════════════════════════╗
║ ERROR ║
╚══════════════════════════════════════════════════════════════╝
File not found: {FILEPATH}
**To fix:** Verify the file path and try again.
Load project context for conflict detection:
.planning/ROADMAP.md — extract phase structure, phase numbers, dependencies.planning/PROJECT.md — extract project constraints, tech stack, scope boundaries.
If PROJECT.md does not exist: skip constraint checks that rely on it and display:
GSD > Note: No PROJECT.md found. Conflict checks against project constraints will be skipped.
.planning/REQUIREMENTS.md — extract existing requirements for overlap and contradiction checks.
If REQUIREMENTS.md does not exist: skip requirement conflict checks and continue.find .planning/phases/ -name "*-CONTEXT.md" -o -name "CONTEXT.md" 2>/dev/null
<decisions> block)Store loaded context for conflict detection in the next step.
</step> <step name="plan_read_input">Read the imported file at FILEPATH.
Determine the format:
phase:, plan:, type: fieldsExtract from the imported content:
Run conflict checks against the loaded project context. The report format, severity semantics, and safety-gate behavior are defined by references/doc-conflict-engine.md — read it and apply it here. Operation noun: import.
<decisions> block → [BLOCKER]depends_on referencing plans that are not yet complete → [WARNING]Render the full Conflict Detection Report using the format in references/doc-conflict-engine.md.
If any [BLOCKER] exists: apply the safety gate from the reference — exit WITHOUT writing any files. No PLAN.md is written when blockers exist.
If only WARNINGS and/or INFO (no blockers):
Text mode (workflow.text_mode: true in config or --text flag): Set TEXT_MODE=true if --text is present in $ARGUMENTS OR text_mode from init JSON is true. When TEXT_MODE is active, replace every AskUserQuestion call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where AskUserQuestion is not available.
Ask via AskUserQuestion using the approve-revise-abort pattern (see references/gate-prompts.md):
If user selects "Abort": exit cleanly with message "Import cancelled."
</step> <step name="plan_convert">Convert the imported content to GSD PLAN.md format.
Ensure the PLAN.md has all required frontmatter fields:
---
phase: "{NN}-{slug}"
plan: "{NN}-{MM}"
type: "feature|refactor|config|test|docs"
wave: 1
depends_on: []
files_modified: []
autonomous: true
must_haves:
truths: []
artifacts: []
---
Reject PBR naming conventions in source content:
If the imported plan references PBR plan naming (e.g., PLAN-01.md, plan-01.md), rename all references to GSD {NN}-{MM}-PLAN.md convention during conversion.
Apply GSD naming convention for the output filename:
{NN}-{MM}-PLAN.md (e.g., 04-01-PLAN.md)PLAN-01.md, plan-01.md, or any other formatDetermine the target directory by querying init.phase-op for the phase number extracted in plan_read_input. This ensures the project_code prefix from .planning/config.json is applied:
INIT=$(gsd-sdk query init.phase-op "{NN}")
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
expected_phase_dir=$(echo "$INIT" | node -e "process.stdout.write(JSON.parse(require('fs').readFileSync('/dev/stdin','utf8')).expected_phase_dir)")
If the directory does not exist, create it:
mkdir -p "${expected_phase_dir}"
Set phase_dir="${expected_phase_dir}" for use in subsequent steps.
Write the PLAN.md file to the target directory.
</step> <step name="plan_validate">Delegate validation to gsd-plan-checker:
Agent({
subagent_type: "gsd-plan-checker",
prompt: "Validate: .planning/phases/{phase}/{plan}-PLAN.md — check frontmatter completeness, task structure, and GSD conventions. Report any issues."
})
ORCHESTRATOR RULE — CODEX RUNTIME: After calling Agent() above, stop working on this task immediately. Do not read more files, edit code, or run tests related to this task while the subagent is active. Wait for the subagent to return its result. This prevents duplicate work, conflicting edits, and wasted context. Only resume when the subagent result is available.
If the checker returns errors:
If the checker returns clean:
Update .planning/ROADMAP.md to reflect the new plan:
Update .planning/STATE.md if appropriate (e.g., increment total plan count).
Commit the imported plan and updated files:
gsd-sdk query commit "docs({phase}): import plan from {basename FILEPATH}" --files .planning/phases/{phase}/{plan}-PLAN.md .planning/ROADMAP.md
Display completion:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► IMPORT COMPLETE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Show: plan filename written, phase directory, validation result, next steps.
</step>Do NOT:
references/doc-conflict-engine.md (no markdown tables, no new severity labels, no bypass of the BLOCKER gate)PLAN-01.md or plan-01.md — always use {NN}-{MM}-PLAN.mdpbr:plan-checker or pbr:planner — use gsd-plan-checker and gsd-planner.planning/.active-skill — this is a PBR pattern with no GSD equivalentpbr-tools, pbr:, or PLAN-BUILD-RUN anywhere