con un clic
spectra-ingest
Update an existing Spectra change from external context
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
Update an existing Spectra change from external context
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
Use when 使用者說「自動推」「loop」「幫我把 change 推到 ready」「不在的時候繼續做」、或 routine fire 自動觸發(--unattended)。適用於推進既有 spectra change;NOT for 非 spectra 工作、一次性任務、interval 盲跑命令(用 /loop)、user 在場想逐項拍板(用 /goal)、或想設計新 loop(看 vendor/snippets/loop-engineering cookbook)。
依功能分類變更並逐步完成 commit,遵循 commitlint 規範。Use when 使用者說「commit」「提交」「分批 commit」,或 working tree 有多組 unrelated 變更需要分門別類提交。
Deprecated alias — 已改名 /change-loop(2026-07-05)。Use when 既有 routine 或舊指令仍呼叫 /loop-engineer 時轉發。
Analyze artifact consistency for a change
Implement or resume tasks from a Spectra change
Archive a completed change
| name | spectra-ingest |
| description | Update an existing Spectra change from external context |
| effort | xhigh |
| license | MIT |
| compatibility | Requires spectra CLI. |
| metadata | {"author":"spectra","version":"1.0","generatedBy":"Spectra"} |
Update an existing Spectra change — from a plan file or conversation context.
Plan file support is available when the tool has a plan directory (~/.claude/plans/). Otherwise, use conversation context to update artifacts.
Prerequisites: This skill requires the spectra CLI. If any spectra command fails with "command not found" or similar, report the error and STOP.
Input: Optionally specify a plan file path or name.
/spectra-ingest ~/.claude/plans/agile-discovering-rocket.md/spectra-ingest agile-discovering-rocket/spectra-ingest (use conversation context or auto-detect plan file)Steps
Locate the requirement source
a. Argument provided → treat as plan file reference (prepend ~/.claude/plans/ and append .md if needed)
b. No argument, plan file detectable:
~/.claude/plans/<name>.md)c. No argument, no plan file detectable:
~/.claude/plans/ for recent filesd. Conversation context fallback (no plan files found at all):
Parse the plan structure (skip if using conversation context)
Claude Code plan files typically contain:
# ...) — the high-level goalExtract:
plan_title: from the H1 headingplan_context: from the Context sectionplan_stages: each numbered stage with its goal and file listplan_files: all file paths mentionedplan_verification: verification stepsCheck for active changes (REQUIRED — ingest only updates existing changes)
spectra list --json
Also check for parked changes:
spectra list --parked --json
Parse both JSON outputs to get the full list of changes (active + parked). Parked changes should be annotated with "(parked)" in any selection list.
/spectra-propose first to create one." and stopSelect the change
After selecting the change, check if it is parked:
spectra list --parked --json
If the selected change appears in the parked array:
spectra unpark "<name>" then proceedIf there is no AskUserQuestion tool available (non-Claude-Code environment):
Inform the user that this change is currently parked(暫存)and ask via plain text whether to unpark and continue, or cancel.
Wait for the user's response. If the user confirms, run spectra unpark "<name>" then proceed.
Read existing artifacts for context before updating.
⚠ Pre-update gate: Plain-language scope check (when scope is structurally changing)
If the new context (plan file or conversation) introduces structural scope change — not just adding task detail — present a plain-language summary BEFORE rewriting artifacts so the user can catch misunderstandings early.
Trigger structural-scope mode when the new context does any of:
Skip when the new context is purely additive task detail (e.g. "add screenshot to manual review step 3", "rename function X to Y", "fix typo in spec", "add @no-screenshot marker to item #4.2").
Apply the same 4-part structure as /spectra-discuss § Plain-Language Synthesis:
櫃子 / 本子 / 服務窗口, not table / endpoint)Get explicit user confirmation before proceeding to Step 5. If user signals "no, that's not what I meant" → loop back and clarify before touching artifacts.
NEVER apply structural artifact changes without this confirmation step. The cost of a misread ingest is high — completed [x] tasks may need rework, design.md may need recapture, capability boundaries may shift.
See /spectra-discuss SKILL.md § Plain-Language Synthesis for full structure, examples, and trigger details.
Update artifacts
For each artifact, get instructions first:
spectra instructions <artifact-id> --change "<name>" --json
Use the template from instructions as the output structure. Apply context and rules as constraints but do NOT copy them into the file.
The instructions JSON includes locale — the language to write artifacts in. If present, you MUST write the artifact content in that language. Exception: spec files (specs/*/*.md) MUST always be written in English regardless of locale, because they use normative language (SHALL/MUST).
Plan-to-Artifact Mapping (when using a plan file):
| Plan Section | Artifact | How to Map |
|---|---|---|
| Title | Change name | Convert to kebab-case |
| Context | proposal: Why | Direct content transfer |
| Stages overview | proposal: What | Summarize all stages |
| Individual stages | tasks.md groups | One stage = one ## heading, sub-items = - [ ] |
| File paths | proposal: Impact | Affected code list |
| Verification steps | tasks.md | Final verification task group |
Context-to-Artifact Mapping (when using conversation context):
| Conversation Element | Artifact | How to Map |
|---|---|---|
| Goal / requirement | proposal: Why | Extract motivation from discussion |
| Discussed approach | proposal: What | Summarize agreed approach |
| Mentioned files | proposal: Impact | Affected code list |
| Discussion phases | tasks.md groups | One topic = one ## heading |
When updating an existing change:
[x] items[P] markers on tasks that still qualifyParallel task markers ([P]): When creating or updating the tasks artifact, first read .spectra.yaml. If parallel_tasks: true is set, add [P] markers to new tasks that can be executed in parallel. Format: - [ ] [P] Task description. A task qualifies for [P] if it targets different files from other pending tasks AND has no dependency on incomplete tasks in the same group. When parallel_tasks is not enabled, do NOT add [P] markers — but still preserve any existing [P] markers already in the file.
After creating each artifact, re-check status:
spectra status --change "<name>" --json
Continue until all applyRequires artifacts are complete. Show progress: "✓ Created "
Inline Self-Review (before CLI analysis)
After updating all artifacts, scan them manually. Fix issues inline, then proceed to the CLI analyzer.
Check 1: No Placeholders
These patterns are artifact failures — fix each one before proceeding:
Check 2: Internal Consistency
Check 3: Scope Check
Check 4: Ambiguity Check
Check 5: Preservation Check (ingest-specific)
[x] still present and unchanged?[P] markers preserved on tasks that still qualify?Check 6: Durable Handoff Review (run BEFORE the CLI analyzer)
The updated change has to survive being parked or handed to another agent. Reject and fix any of the following on incomplete design and task content (do not rewrite completed [x] tasks):
Fix every failure inline using the existing context and the new plan/conversation source before running the CLI analyzer. Update incomplete design and task content so behavior contracts, verification criteria, and scope boundaries stay current with the new context. Preserve completed tasks unchanged.
Check 7: Manual Review Marker Hygiene (clade fork — applies whenever ingest modifies ## 人工檢查 items)
/spectra-ingest retro-updates a change after impl / verify, which can introduce new ## 人工檢查 items or modify existing ones — bypassing /spectra-propose Step 5.5. The same hygiene rules MUST be enforced here. Apply Rule 1-4 mirroring spectra-propose Step 5.5 (Manual Review Marker Hygiene Check). Violations → main thread Edits tasks.md directly (do NOT round-trip to codex; too slow):
Rule 1: Every item line MUST carry a leading marker
- [ ] #N ... / - [ ] #N.M ... line MUST have a legal marker immediately after the id: [review:ui] / [discuss] / [verify:e2e] / [verify:api] / [verify:ui] / verify multi-marker [verify:<a>+<b>] or [verify:<a>+<b>+<c>]e2e / api / ui, canonical order e2e → api → ui[review:ui] / [discuss]; [verify:api+review:ui] / [verify:api+discuss] are illegalreview:ui — the root cause of repeated [review:ui] mis-tagging)Rule 2: Evidence-collection items → [discuss] or [verify:api]
Items containing Apply migration / SSH / docker exec / psql / \d <table> / SELECT ... FROM / curl / Trigger ... cron / SET session_replication_role / 「合理性檢查」/「商業判斷」:
\d / SELECT / controlled drift / migration existence / 商業判斷 → [discuss]curl / HTTP endpoint round-trip reproducible by apply main thread → [verify:api][review:ui] / [verify:ui] / deprecated [verify:auto] → change to [discuss] or [verify:api]Rule 3: Real user round-trip items → channel per evidence shape
[verify:e2e][verify:api][verify:ui][verify:api+ui][verify:e2e+ui][review:ui]Rule 4: [review:ui] whitelist
[review:ui] only when description contains one of:
Otherwise → explicit verify:* per Rule 3. Misclassified items flagged and rewritten by main thread.
Then re-run the hook:
bash scripts/spectra-advanced/post-propose-manual-review-check.sh <change-name>
Exit 2 = pattern findings (any of MISSING_KIND_MARKER / ABSTRACT_REFERENCE / CARD_WITHOUT_UID / UI_ITEM_NO_URL / MULTI_STEP_NOT_SCOPED / REVIEW_UI_BACKEND_ROUNDTRIP / INTERNAL_JARGON_LEAKAGE / MIXED_CN_EN_TERM). Main thread SHALL Edit tasks.md directly per hook stdout remediation guidance. Reference: vendor/snippets/manual-review-enforcement/patterns.json + rules/core/manual-review.data-readiness.md.
Legitimate false positive (e.g., 真機掃 SMS 無 dev replay endpoint) → add @no-manual-review-check[<reason>] trailing marker per manual-review.md「@no-manual-review-check Marker」.
Why this exists: Without ingest-time enforcement, items modified or added after the original propose cycle can land with Default Kind Derivation Rule silently falling back to [review:ui]. The review-gui displays the fallback identically to an explicit marker, so the user only discovers the mismatch when they reach the item in review (e.g., 「為何叫我打 API」 / 「這違反 review:ui 收斂原則」). This loop has repeated across multiple changes — ingest MUST be the gate that catches it.
| What You're Thinking | What You Should Do |
|---|---|
| "The existing artifacts are close enough, just adjust the tasks" | Read the new context carefully. "Close enough" means you're missing something |
| "The proposal doesn't need updating, the change is the same" | If new context exists, the proposal likely needs updates. At minimum, check |
| "I can merge these tasks, they're basically the same" | Keep tasks granular. Merged tasks are harder to track |
| "The completed tasks still apply, no need to review" | Verify they're still relevant to updated scope. Don't blindly keep stale work |
| "This spec change is minor, skip the scenario update" | If the requirement changed, the scenario must change |
| "The conversation didn't discuss this artifact, so skip it" | Absence of discussion doesn't mean absence of impact. Check |
Analyze-Fix Loop (max 2 iterations)
spectra analyze <name> --json
spectra analyze <name> --json
d. Repeat up to 2 total iterationsValidation
spectra validate "<name>"
If validation fails, fix errors and re-validate.
8.5. Commit artifacts (post-validation, TD-216 desync prevention)
After validation passes, MUST commit the updated openspec artifacts so /wt fork picks up re-scoped tasks.md:
git commit --only -m "📝 spectra: ingest <change-name>" -- openspec/changes/<change-name>/
Per worktree-default §9.5, spectra artifacts MUST live in git. Uncommitted re-scoped tasks.md causes review-gui impl-gate desync: /wt fork inherits committed (pre-ingest) version → build in worktree uses old phase list → review-gui reads main's re-scoped tasks.md with unchecked phases → impl% falsely low.
Summary and next steps
Show:
<path>) or conversation contextUse AskUserQuestion tool to confirm the workflow is complete. This ensures the workflow stops even when auto-accept is enabled. Provide exactly these options:
/spectra-apply <change-name> when ready./spectra-apply <change-name> to start implementation.If AskUserQuestion tool is not available, display the summary and inform the user to run /spectra-apply <change-name> when ready. Then STOP — do not continue.
After the user responds, if they chose "Done", the workflow is OVER. If they chose "Apply", invoke /spectra-apply <change-name> to begin implementation.
Guardrails
~/.claude/plans//spectra-propose[x]) — never revert progressspectra CLI is not available, report the error and stop