Summary
The native quoin to-plan workflow writes its draft outside the target repository and does not render any template variables. Two runs with different answers produced byte-identical files containing literal {{items...}} placeholders.
Exact commands and working directories
QObs run from /home/peter/dev/quire-observation-c00:
quoin to-plan --target spec/ --json
ix-flow record-answers 83cb52ad-59c2-45f1-8cad-270cf28dd0ca plan --answers '{"artifact_id":"Plan-002","slug":"complete-v1-observation-authority","title":"quire-observation — complete V1 observation authority","requirement_ids":"FR-007, FR-008, FR-009, FR-010, FR-011, NFR-003","readiness_notes":"All base and seven specialist reviews pass."}' --json
ix-flow advance 83cb52ad-59c2-45f1-8cad-270cf28dd0ca evidence_recorded --json
ix-flow advance 83cb52ad-59c2-45f1-8cad-270cf28dd0ca plan_drafted --json
Integration run from /home/peter/dev/quire-integration followed the same sequence with run f95f44d6-2b14-4ba4-b52c-4a7ea7bb1e72, Plan-001, and slug complete-v1-composed-integration.
Expected behavior
Per the installed spec-to-plan skill, each run should create a repository-local bundle:
<project_root>/plan/<Plan-id>-<slug>/plan.md
The draft should interpolate the recorded plan answers.
Actual behavior
The QObs advance returned:
{
"state": "ok",
"current_phase": "plan_drafted",
"artifacts": [{
"templateId": "implementation_plan",
"path": "/home/peter/.ix/plan/plan-complete-v1-observation-authority/plan.md",
"contentHash": "64b508bd2b3f6e4099cc8536890cb7ae80ed78f501e7c8b8458e8e0a1b8d9a48"
}]
}
The integration advance returned the same hash at:
/home/peter/.ix/plan/plan-complete-v1-composed-integration/plan.md
Both files are byte-identical and retain literal placeholders, including:
type: Plan
id: "{{items.plan_answers.plan.id}}"
title: "{{items.plan_answers.plan.title}}"
traces_to:
- "{{items.plan_answers.plan.requirement_ids}}"
The workflow state stores plan_answers as an array item with fields artifact_id, slug, title, requirement_ids, and readiness_notes, but the template references items.plan_answers.plan.id. The target resolves under ~/.ix rather than the invoking project.
No error output was emitted; the workflow incorrectly reported state: ok.
Versions
quoin 0.23.1-260-gf9aa659
ix-flow CLI 0.1.0
workflow def to-plan 0.1.0
OS/arch: Linux 6.18.33.2-microsoft-standard-WSL2 x86_64 GNU/Linux
The native output also reports the bundled skill path as:
/tmp/quoin-525-fix/skills/spec-to-plan/workflow-assets/skills/to-plan.
Minimal reproducer
- In any repository with a
spec/ directory, run quoin to-plan --target spec/ --json.
- Record all required
plan interview answers with ix-flow record-answers.
- Advance to
evidence_recorded, then plan_drafted.
- Observe the artifact path under
~/.ix/plan/ rather than the repository.
- Open the generated file and observe unrendered
{{items.plan_answers.plan.*}} placeholders.
Summary
The native
quoin to-planworkflow writes its draft outside the target repository and does not render any template variables. Two runs with different answers produced byte-identical files containing literal{{items...}}placeholders.Exact commands and working directories
QObs run from
/home/peter/dev/quire-observation-c00:Integration run from
/home/peter/dev/quire-integrationfollowed the same sequence with runf95f44d6-2b14-4ba4-b52c-4a7ea7bb1e72,Plan-001, and slugcomplete-v1-composed-integration.Expected behavior
Per the installed spec-to-plan skill, each run should create a repository-local bundle:
The draft should interpolate the recorded plan answers.
Actual behavior
The QObs advance returned:
{ "state": "ok", "current_phase": "plan_drafted", "artifacts": [{ "templateId": "implementation_plan", "path": "/home/peter/.ix/plan/plan-complete-v1-observation-authority/plan.md", "contentHash": "64b508bd2b3f6e4099cc8536890cb7ae80ed78f501e7c8b8458e8e0a1b8d9a48" }] }The integration advance returned the same hash at:
Both files are byte-identical and retain literal placeholders, including:
The workflow state stores
plan_answersas an array item with fieldsartifact_id,slug,title,requirement_ids, andreadiness_notes, but the template referencesitems.plan_answers.plan.id. The target resolves under~/.ixrather than the invoking project.No error output was emitted; the workflow incorrectly reported
state: ok.Versions
The native output also reports the bundled skill path as:
/tmp/quoin-525-fix/skills/spec-to-plan/workflow-assets/skills/to-plan.Minimal reproducer
spec/directory, runquoin to-plan --target spec/ --json.planinterview answers withix-flow record-answers.evidence_recorded, thenplan_drafted.~/.ix/plan/rather than the repository.{{items.plan_answers.plan.*}}placeholders.