# 2026-09-18 โ€” Ticket 0005 task format ## Done `.tickets/issues/0005-create-a-native-ui-to-connect-the-webapp.yaml` tasks rewritten from a hand-made `text/done` shape to IssueSpec's task schema. Verified with IssueSpec's own parser (all 15 tickets parse). Ticket stays `open`: task 8 (launch the window with the GUI toolchain and confirm the iframe embed) is still open โ€” see `summary.md` "Not yet established". ## How to validate a ticket file (recipe) ```bash cat > /tmp/v.mjs <<'EOF2' import { parseIssueDocument } from '/Users/k33g/CodeBerg/issuespec/src/core/yaml.ts'; import { readFileSync } from 'node:fs'; const f = process.argv[2]; try { const r = parseIssueDocument(readFileSync(f,'utf8'), f); console.log('OK', r.tasks.length, 'tasks'); } catch (e) { console.log('INVALID:', e.message); process.exitCode = 1; } EOF2 (cd ~/CodeBerg/issuespec && npx --no-install esbuild /tmp/v.mjs --bundle --platform=node --format=cjs --outfile=/tmp/v.cjs) for f in .tickets/issues/*.yaml; do printf '%s: ' "$f"; node /tmp/v.cjs "$f"; done ``` `--format=esm` fails ("Dynamic require of process") because of the `yaml` package; use cjs. ## Trap When closing a ticket's checklist by hand, copy the shape from a tool-written task (e.g. ticket 0001) โ€” `priority` is always written (`none`), `closedAt` only while `state: closed`. Reference: `~/CodeBerg/issuespec/docs/en/reference/ticket-files.md` ยง Task.