Skip to content

Native to-plan writes outside project and leaves template placeholders unrendered #532

Description

@kreneskyp

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

  1. In any repository with a spec/ directory, run quoin to-plan --target spec/ --json.
  2. Record all required plan interview answers with ix-flow record-answers.
  3. Advance to evidence_recorded, then plan_drafted.
  4. Observe the artifact path under ~/.ix/plan/ rather than the repository.
  5. Open the generated file and observe unrendered {{items.plan_answers.plan.*}} placeholders.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions