{
  "version": 1,
  "migrations": [
    {
      "id": "jobforge-managed-scripts",
      "description": "Expose JobForge's deterministic consumer-project helper commands.",
      "operations": [
        {
          "type": "json-merge",
          "path": "package.json",
          "pointer": "/scripts",
          "value": {
            "apply:queue": "job-forge apply:queue",
            "capabilities:list": "job-forge capabilities:list",
            "capabilities:explain": "job-forge capabilities:explain",
            "capabilities:check": "job-forge capabilities:check",
            "capabilities:render": "job-forge capabilities:render",
            "context:list": "job-forge context:list",
            "context:explain": "job-forge context:explain",
            "context:plan": "job-forge context:plan",
            "context:check": "job-forge context:check",
            "context:render": "job-forge context:render",
            "portal:snapshot": "job-forge portal:snapshot",
            "portal:form-schema": "job-forge portal:form-schema",
            "portal:explain": "job-forge portal:explain",
            "cache:key": "job-forge cache:key",
            "cache:has": "job-forge cache:has",
            "cache:get": "job-forge cache:get",
            "cache:put": "job-forge cache:put",
            "cache:status": "job-forge cache:status",
            "cache:list": "job-forge cache:list",
            "cache:verify": "job-forge cache:verify",
            "cache:prune": "job-forge cache:prune",
            "index:build": "job-forge index:build",
            "index:status": "job-forge index:status",
            "index:verify": "job-forge index:verify",
            "index:has": "job-forge index:has",
            "index:query": "job-forge index:query",
            "index:explain": "job-forge index:explain",
            "facts:build": "job-forge facts:build",
            "facts:status": "job-forge facts:status",
            "facts:verify": "job-forge facts:verify",
            "facts:check": "job-forge facts:check",
            "facts:has": "job-forge facts:has",
            "facts:query": "job-forge facts:query",
            "facts:explain": "job-forge facts:explain",
            "score:compute": "job-forge score:compute",
            "score:verify": "job-forge score:verify",
            "score:check": "job-forge score:check",
            "score:gate": "job-forge score:gate",
            "score:compare": "job-forge score:compare",
            "score:explain": "job-forge score:explain",
            "canon:normalize": "job-forge canon:normalize",
            "canon:key": "job-forge canon:key",
            "canon:compare": "job-forge canon:compare",
            "canon:explain": "job-forge canon:explain",
            "preflight:plan": "job-forge preflight:plan",
            "preflight:check": "job-forge preflight:check",
            "preflight:explain": "job-forge preflight:explain",
            "postflight:status": "job-forge postflight:status",
            "postflight:check": "job-forge postflight:check",
            "postflight:explain": "job-forge postflight:explain",
            "timeline:status": "job-forge timeline:status",
            "timeline:build": "job-forge timeline:build",
            "timeline:plan": "job-forge timeline:plan",
            "timeline:due": "job-forge timeline:due",
            "timeline:check": "job-forge timeline:check",
            "timeline:verify": "job-forge timeline:verify",
            "timeline:explain": "job-forge timeline:explain",
            "prioritize:status": "job-forge prioritize:status",
            "prioritize:items": "job-forge prioritize:items",
            "prioritize:build": "job-forge prioritize:build",
            "prioritize:rank": "job-forge prioritize:rank",
            "prioritize:select": "job-forge prioritize:select",
            "prioritize:check": "job-forge prioritize:check",
            "prioritize:verify": "job-forge prioritize:verify",
            "prioritize:explain": "job-forge prioritize:explain",
            "lineage:status": "job-forge lineage:status",
            "lineage:record": "job-forge lineage:record",
            "lineage:check": "job-forge lineage:check",
            "lineage:stale": "job-forge lineage:stale",
            "lineage:verify": "job-forge lineage:verify",
            "lineage:explain": "job-forge lineage:explain",
            "redact:scan": "job-forge redact:scan",
            "redact:verify": "job-forge redact:verify",
            "redact:apply": "job-forge redact:apply",
            "redact:explain": "job-forge redact:explain",
            "receipts:create": "job-forge receipts:create",
            "receipts:capture": "job-forge receipts:capture",
            "receipts:verify": "job-forge receipts:verify",
            "receipts:inspect": "job-forge receipts:inspect",
            "receipts:redact": "job-forge receipts:redact",
            "receipts:path": "job-forge receipts:path",
            "migrate:plan": "job-forge migrate:plan",
            "migrate:apply": "job-forge migrate:apply",
            "migrate:check": "job-forge migrate:check",
            "migrate:explain": "job-forge migrate:explain"
          }
        }
      ]
    },
    {
      "id": "jobforge-generated-ignores",
      "description": "Keep generated JobForge runtime artifacts out of consumer git state.",
      "operations": [
        {
          "type": "ensure-lines",
          "path": ".gitignore",
          "create": true,
          "after": "# Generated",
          "lines": [
            ".jobforge-runs/",
            ".jobforge-ledger/",
            ".jobforge-cache/",
            ".jobforge-index.json",
            ".jobforge-facts.json",
            ".jobforge-timeline.json",
            ".jobforge-timeline-events.jsonl",
            ".jobforge-prioritize.json",
            ".jobforge-prioritize-items.json",
            ".jobforge-lineage.json",
            ".jobforge-mcp/",
            ".jobforge-redacted/",
            ".jobforge-receipts/",
            "data/timeline-events.jsonl",
            "batch/preflight-candidates.json",
            "batch/preflight-plan.json",
            "batch/postflight-outcomes.json",
            "/.codex/iso-route.md",
            "/.agents/skills/job-forge",
            "/.opencode/commands/job-forge.md",
            "/.opencode/skills/job-forge.md",
            "/batch/codex-apply-one.prompt.md",
            "/batch/codex-apply-outcome.schema.json"
          ]
        }
      ]
    }
  ]
}
