{
  "id": "spec-first-tickets",
  "type": "loadout",
  "title": "Spec first, then tickets",
  "summary": "Lightweight spec-driven flow: a SPEC.md with testable acceptance criteria, small tickets, test-first builds in parallel waves and a review against the spec.",
  "description": "Spec-driven development was one of the most consistent practices among working developers this autumn, usually in a light\nform: write the spec with the agent, split it into tickets, build each ticket with a test, review against the spec. This\nloadout encodes that flow without a framework: when a spec is needed, what a testable acceptance criterion looks like,\nticket rules that make parallel work safe, and what to do when the spec turns out to be wrong. It points to Spec Kit and\nOpenSpec for teams that want more.\n",
  "highlights": [
    "When a spec is required and when it is not",
    "SPEC.md and TASKS.md templates with testable acceptance criteria",
    "Interview skill: at most five questions at a time, each with a recommended answer",
    "Implementation in dependency waves, test first, one commit per ticket",
    "Spec drift rule: stop and update the spec instead of improvising"
  ],
  "version": "1.0.0",
  "license": "MIT",
  "author": {
    "name": "Agent Loadout",
    "url": "https://loadout.jnw-it.com"
  },
  "credits": [
    {
      "title": "@mattpocockuk: /implement-spec with research, parallel tickets and review",
      "url": "https://x.com/mattpocockuk/status/2090744569960824949"
    },
    {
      "title": "GitHub Spec Kit",
      "url": "https://github.com/github/spec-kit"
    },
    {
      "title": "OpenSpec",
      "url": "https://github.com/Fission-AI/OpenSpec"
    }
  ],
  "categories": [
    "workflow",
    "ai-agents"
  ],
  "stacks": [
    "any"
  ],
  "files": [
    {
      "path": "AGENTS.md",
      "role": "instructions",
      "description": "Spec, ticket and implementation rules.",
      "skill": null,
      "agent": null,
      "install_to": {
        "claude-code": "AGENTS.md",
        "codex": "AGENTS.md",
        "cursor": "AGENTS.md",
        "gemini-cli": "AGENTS.md",
        "antigravity-cli": "AGENTS.md",
        "copilot": "AGENTS.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/AGENTS.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/latest/AGENTS.md",
      "bytes": 1523,
      "lang": "markdown",
      "content": "# AGENTS.md: spec first, then tickets, then code\n\nFor any change bigger than a small fix, agree a written spec with the human before writing code, then implement it\nas small tickets with checkable acceptance criteria.\n\n## When a spec is required\n- New feature, new endpoint or screen, schema change, cross-module refactor, or anything estimated over ~200 lines.\n- Not required: bug fixes with a failing test, copy changes, dependency bumps, one-file refactors.\n\n## Files\n- Specs: `specs/<yyyy-mm-dd>-<slug>/SPEC.md`. Tickets: `TASKS.md` in the same folder. Both committed.\n- The spec is the source of truth. If implementation reveals the spec is wrong, stop, update the spec and tell the human.\n\n## Spec rules\n- Problem and goal first; the solution second. Name what is out of scope.\n- Acceptance criteria are observable and testable: \"GET /api/orders?status=open returns only open orders, newest first\".\n  Not \"orders are filtered correctly\".\n- List open questions instead of guessing. Do not start implementation while any are unanswered.\n- Keep it short: one to two screens.\n\n## Ticket rules\n- Each ticket is independently testable and small (under ~200 changed lines), lists the files it touches, and maps to\n  one or more acceptance criteria.\n- Mark dependencies. Tickets with no shared files and no dependency can run in parallel.\n- A ticket is done when its criteria pass in a test, not when the code compiles.\n\nUse the `write-spec` skill to draft the spec and tickets, and the `implement-spec` skill to build them.\n"
    },
    {
      "path": "CLAUDE.md",
      "role": "adapter",
      "description": "Imports AGENTS.md for Claude Code.",
      "skill": null,
      "agent": "claude-code",
      "install_to": {
        "claude-code": "CLAUDE.md",
        "codex": null,
        "cursor": null,
        "gemini-cli": null,
        "antigravity-cli": null,
        "copilot": null
      },
      "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/CLAUDE.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/latest/CLAUDE.md",
      "bytes": 391,
      "lang": "markdown",
      "content": "# CLAUDE.md\n\n@AGENTS.md\n\n## Claude Code notes\n- Skills from this loadout live in `.claude/skills/`: `write-spec`, `implement-spec`. Use them when their description matches the task.\n- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.\n\n<!-- From the Agent Loadout \"Spec first, then tickets\" v1.0.0 — https://loadout.jnw-it.com/loadouts/spec-first-tickets/ -->\n"
    },
    {
      "path": "GEMINI.md",
      "role": "adapter",
      "description": "Imports AGENTS.md for Gemini CLI.",
      "skill": null,
      "agent": "gemini-cli",
      "install_to": {
        "claude-code": null,
        "codex": null,
        "cursor": null,
        "gemini-cli": "GEMINI.md",
        "antigravity-cli": null,
        "copilot": null
      },
      "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/GEMINI.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/latest/GEMINI.md",
      "bytes": 392,
      "lang": "markdown",
      "content": "# GEMINI.md\n\n@./AGENTS.md\n\n## Gemini CLI notes\n- Skills from this loadout live in `.agents/skills/`: `write-spec`, `implement-spec`. Use them when their description matches the task.\n- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.\n\n<!-- From the Agent Loadout \"Spec first, then tickets\" v1.0.0 — https://loadout.jnw-it.com/loadouts/spec-first-tickets/ -->\n"
    },
    {
      "path": "skills/write-spec/SKILL.md",
      "role": "skill",
      "description": "Research, interview and write SPEC.md and TASKS.md.",
      "skill": "write-spec",
      "agent": null,
      "install_to": {
        "claude-code": ".claude/skills/write-spec/SKILL.md",
        "codex": ".agents/skills/write-spec/SKILL.md",
        "cursor": ".agents/skills/write-spec/SKILL.md",
        "gemini-cli": ".agents/skills/write-spec/SKILL.md",
        "antigravity-cli": ".agents/skills/write-spec/SKILL.md",
        "copilot": ".agents/skills/write-spec/SKILL.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/SKILL.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/latest/skills/write-spec/SKILL.md",
      "bytes": 1069,
      "lang": "markdown",
      "content": "---\nname: write-spec\ndescription: Interview the human and research the codebase to write SPEC.md and TASKS.md for a feature before any code. Use when asked to plan or build a non-trivial feature.\n---\n\n# Write a spec\n\n1. **Research first, quietly.** Read the relevant code (delegate broad reading to a read-only subagent where available).\n   Note existing patterns, data models and tests the feature must fit.\n2. **Interview.** Ask the human at most five questions at a time, only ones the code cannot answer: users, edge cases,\n   limits, what is out of scope. Offer a recommended answer with each question.\n3. **Draft** `specs/<date>-<slug>/SPEC.md` from `references/spec-template.md`. Every acceptance criterion must be testable.\n4. **Split into tickets** in `TASKS.md` (format in the template): small, file-scoped, mapped to criteria, dependencies marked.\n5. **Review with the human.** Show the spec and tickets; list open questions. Change nothing in source code until the human\n   approves the spec.\n6. **Commit** the spec folder on its own: `docs(spec): <slug>`.\n"
    },
    {
      "path": "skills/write-spec/references/spec-template.md",
      "role": "reference",
      "description": "SPEC.md and TASKS.md templates.",
      "skill": "write-spec",
      "agent": null,
      "install_to": {
        "claude-code": ".claude/skills/write-spec/references/spec-template.md",
        "codex": ".agents/skills/write-spec/references/spec-template.md",
        "cursor": ".agents/skills/write-spec/references/spec-template.md",
        "gemini-cli": ".agents/skills/write-spec/references/spec-template.md",
        "antigravity-cli": ".agents/skills/write-spec/references/spec-template.md",
        "copilot": ".agents/skills/write-spec/references/spec-template.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/references/spec-template.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/latest/skills/write-spec/references/spec-template.md",
      "bytes": 736,
      "lang": "markdown",
      "content": "# SPEC.md template\n\n```markdown\n# <Feature name>\nStatus: draft | approved | done · Owner: <human> · Date: <yyyy-mm-dd>\n\n## Problem\n<who has the problem, what happens today, why it matters>\n\n## Goal\n<one or two sentences>\n\n## Out of scope\n- <explicitly not doing>\n\n## Design\n<data model changes, endpoints or screens, key decisions and the alternatives rejected>\n\n## Acceptance criteria\n- AC1: <observable, testable statement>\n- AC2: ...\n\n## Open questions\n- Q1: <question> (recommended answer: <...>)\n```\n\n# TASKS.md template\n\n```markdown\n# Tasks for <feature>\n\n- [ ] T1 <title> · covers AC1 · files: src/api/orders.ts, tests/api/orders.test.ts · depends on: none\n- [ ] T2 <title> · covers AC2 · files: ... · depends on: T1\n```\n"
    },
    {
      "path": "skills/implement-spec/SKILL.md",
      "role": "skill",
      "description": "Build tickets test-first in waves and review against the spec.",
      "skill": "implement-spec",
      "agent": null,
      "install_to": {
        "claude-code": ".claude/skills/implement-spec/SKILL.md",
        "codex": ".agents/skills/implement-spec/SKILL.md",
        "cursor": ".agents/skills/implement-spec/SKILL.md",
        "gemini-cli": ".agents/skills/implement-spec/SKILL.md",
        "antigravity-cli": ".agents/skills/implement-spec/SKILL.md",
        "copilot": ".agents/skills/implement-spec/SKILL.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/implement-spec/SKILL.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/latest/skills/implement-spec/SKILL.md",
      "bytes": 1400,
      "lang": "markdown",
      "content": "---\nname: implement-spec\ndescription: Build an approved SPEC.md ticket by ticket with tests for each acceptance criterion, in parallel where tickets are independent, then review against the spec. Use after a spec has been approved.\n---\n\n# Implement a spec\n\n1. **Check approval.** `SPEC.md` status must be `approved` and open questions empty. Otherwise stop.\n2. **Plan waves.** From `TASKS.md`, group tickets with no dependencies and no shared files into waves.\n3. **Per ticket** (yourself, or one subagent or worktree per ticket in a wave):\n   - Write the test for the ticket's acceptance criteria first and see it fail.\n   - Implement until it passes; run the full test suite.\n   - Tick the ticket in `TASKS.md` and commit: `feat(<slug>): T<n> <title>`.\n4. **Between waves** pull in finished work and run the full suite before starting the next wave.\n5. **Spec drift.** If a ticket cannot meet its criterion as written, stop that ticket, propose a spec change to the human,\n   and continue only with unaffected tickets.\n6. **Final review** against the spec, by a reviewer that did not write the code: every AC has a passing test, nothing out of\n   scope was built. Set `Status: done` in `SPEC.md`.\n\nHeavier frameworks exist if the team wants more structure: GitHub Spec Kit (`specify` CLI) and OpenSpec\n(`npx @fission-ai/openspec`). Use them only if the repository already does; do not mix formats.\n"
    }
  ],
  "requires": {
    "tools": [],
    "env": [],
    "mcp": []
  },
  "tested": {
    "status": "untested",
    "last_run": null,
    "fixture": null,
    "per_agent": {
      "claude-code": "untested",
      "codex": "untested",
      "cursor": "untested",
      "gemini-cli": "untested",
      "antigravity-cli": "untested",
      "copilot": "untested"
    }
  },
  "security": {
    "scanned": true,
    "scanner": "intake-precheck/1",
    "verdict": "clean",
    "network": false,
    "scripts": []
  },
  "featured": false,
  "deprecated": false,
  "last_checked": "2026-10-17",
  "published": "2026-10-17",
  "updated": "2026-10-17",
  "compatibility": {
    "claude-code": "native",
    "codex": "native",
    "cursor": "native",
    "gemini-cli": "native",
    "antigravity-cli": "native",
    "copilot": "native"
  },
  "counts": {
    "rules": 1,
    "skills": 2,
    "mcp": 0
  },
  "url": "https://loadout.jnw-it.com/loadouts/spec-first-tickets/",
  "api_url": "https://loadout.jnw-it.com/api/loadouts/spec-first-tickets.json",
  "verification": {
    "level": "verified-install",
    "status": "verified",
    "label": "Verified install",
    "verified": true,
    "checked_at": "2026-10-17T07:47:06Z",
    "commit": "316f4bcae9d3c1f64f8f5e32a12e27e0c36f13b5",
    "content_current": true,
    "agent_tests": "not-run",
    "counts": {
      "pass": 8,
      "fail": 0,
      "skip": 0,
      "not_applicable": 2
    },
    "meaning": "Level 1: automated checks on the files (parse, install paths, MCP config, safety scan, references, size, licence, starter build). No AI agent was run.",
    "checks": [
      {
        "id": "listing",
        "name": "Listing",
        "status": "pass",
        "summary": "Schema valid; 6 files declared, none missing or extra",
        "details": [
          "tested.status: untested (agent tests are separate from Level 1)"
        ]
      },
      {
        "id": "parse",
        "name": "Files parse",
        "status": "pass",
        "summary": "All 6 files parse; front matter valid",
        "details": []
      },
      {
        "id": "adapters",
        "name": "Adapters",
        "status": "pass",
        "summary": "CLAUDE.md and GEMINI.md import AGENTS.md and are up to date",
        "details": [
          "CLAUDE.md: matches the generator",
          "GEMINI.md: matches the generator"
        ]
      },
      {
        "id": "install-paths",
        "name": "Install paths",
        "status": "pass",
        "summary": "Correct paths for all 6 agents; layouts re-discovered",
        "details": [
          "Claude Code: 5 files, 2 skills in .claude/skills/",
          "Codex CLI: 4 files, 2 skills in .agents/skills/",
          "Cursor: 4 files, 2 skills in .agents/skills/",
          "Gemini CLI: 5 files, 2 skills in .agents/skills/",
          "Antigravity CLI: 4 files, 2 skills in .agents/skills/",
          "GitHub Copilot: 4 files, 2 skills in .agents/skills/"
        ]
      },
      {
        "id": "mcp",
        "name": "MCP config",
        "status": "n/a",
        "summary": "No MCP servers in this loadout",
        "details": []
      },
      {
        "id": "safety",
        "name": "Safety scan",
        "status": "pass",
        "summary": "Clean: no credentials, risky shell or hidden text",
        "details": [
          "Scanner intake-precheck/1: verdict clean; network no (listing says no)"
        ]
      },
      {
        "id": "references",
        "name": "References",
        "status": "pass",
        "summary": "3 references between files resolve for every agent",
        "details": []
      },
      {
        "id": "size",
        "name": "Size limits",
        "status": "pass",
        "summary": "6 files, 5.4 KB total; largest AGENTS.md 1.5 KB",
        "details": [
          "Limits: 30 files, 32 KB per file, 128 KB total, 500 lines per skill or rule"
        ]
      },
      {
        "id": "licence",
        "name": "Licence",
        "status": "pass",
        "summary": "MIT, by Agent Loadout; text in the repository LICENSE",
        "details": []
      },
      {
        "id": "starter-build",
        "name": "Starter build",
        "status": "n/a",
        "summary": "Not applicable: stack-agnostic workflow rules with no project or code to build",
        "details": [
          "The loadout is a spec-driven workflow, two skills and templates for any stack; there is no starter project to compile.",
          "Every other Level 1 check still runs on this loadout."
        ]
      }
    ]
  },
  "install": {
    "claude-code": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "CLAUDE.md",
          "target": "CLAUDE.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/CLAUDE.md",
          "role": "adapter"
        },
        {
          "path": "skills/write-spec/SKILL.md",
          "target": ".claude/skills/write-spec/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/write-spec/references/spec-template.md",
          "target": ".claude/skills/write-spec/references/spec-template.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/references/spec-template.md",
          "role": "reference"
        },
        {
          "path": "skills/implement-spec/SKILL.md",
          "target": ".claude/skills/implement-spec/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/implement-spec/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/spec-first-tickets/claude-code.zip"
    },
    "codex": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/write-spec/SKILL.md",
          "target": ".agents/skills/write-spec/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/write-spec/references/spec-template.md",
          "target": ".agents/skills/write-spec/references/spec-template.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/references/spec-template.md",
          "role": "reference"
        },
        {
          "path": "skills/implement-spec/SKILL.md",
          "target": ".agents/skills/implement-spec/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/implement-spec/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/spec-first-tickets/codex.zip"
    },
    "cursor": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/write-spec/SKILL.md",
          "target": ".agents/skills/write-spec/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/write-spec/references/spec-template.md",
          "target": ".agents/skills/write-spec/references/spec-template.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/references/spec-template.md",
          "role": "reference"
        },
        {
          "path": "skills/implement-spec/SKILL.md",
          "target": ".agents/skills/implement-spec/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/implement-spec/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/spec-first-tickets/cursor.zip"
    },
    "gemini-cli": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "GEMINI.md",
          "target": "GEMINI.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/GEMINI.md",
          "role": "adapter"
        },
        {
          "path": "skills/write-spec/SKILL.md",
          "target": ".agents/skills/write-spec/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/write-spec/references/spec-template.md",
          "target": ".agents/skills/write-spec/references/spec-template.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/references/spec-template.md",
          "role": "reference"
        },
        {
          "path": "skills/implement-spec/SKILL.md",
          "target": ".agents/skills/implement-spec/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/implement-spec/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/spec-first-tickets/gemini-cli.zip"
    },
    "antigravity-cli": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/write-spec/SKILL.md",
          "target": ".agents/skills/write-spec/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/write-spec/references/spec-template.md",
          "target": ".agents/skills/write-spec/references/spec-template.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/references/spec-template.md",
          "role": "reference"
        },
        {
          "path": "skills/implement-spec/SKILL.md",
          "target": ".agents/skills/implement-spec/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/implement-spec/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/spec-first-tickets/antigravity-cli.zip"
    },
    "copilot": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/write-spec/SKILL.md",
          "target": ".agents/skills/write-spec/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/write-spec/references/spec-template.md",
          "target": ".agents/skills/write-spec/references/spec-template.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/references/spec-template.md",
          "role": "reference"
        },
        {
          "path": "skills/implement-spec/SKILL.md",
          "target": ".agents/skills/implement-spec/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/implement-spec/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/spec-first-tickets/copilot.zip"
    }
  },
  "source_zip_url": "https://loadout.jnw-it.com/download/spec-first-tickets/source.zip"
}