{
  "schema": "https://miscsubjects.com/schemas/jarticle.json",
  "status": "published",
  "slug": "graph-task-proofs-20261105",
  "title": "Graph task proofs",
  "kind": "task",
  "visibility": "public",
  "facts": {
    "state": "taken",
    "spec": "Graph tasks, image models, execution, visibility",
    "checks": [
      {
        "proof": "T1-add",
        "status": 201,
        "expected": 201,
        "pass": true,
        "receipt": "T1-add.json"
      },
      {
        "proof": "T1-get",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "T1-get.json"
      },
      {
        "proof": "T2-edit",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "T2-edit.json"
      },
      {
        "proof": "T2-stale",
        "status": 412,
        "expected": 412,
        "pass": true,
        "receipt": "T2-stale.json"
      },
      {
        "proof": "T4-add-fact",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "T4-add-fact.json"
      },
      {
        "proof": "T4-get",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "T4-get.json"
      },
      {
        "proof": "T3-add",
        "status": 201,
        "expected": 201,
        "pass": true,
        "receipt": "T3-add.json"
      },
      {
        "proof": "T3-before",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "T3-before.json"
      },
      {
        "proof": "T3-delete",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "T3-delete.json"
      },
      {
        "proof": "T3-missing",
        "status": 404,
        "expected": 404,
        "pass": true,
        "receipt": "T3-missing.json"
      },
      {
        "proof": "M1-add",
        "status": 201,
        "expected": 201,
        "pass": true,
        "receipt": "M1-add.json"
      },
      {
        "proof": "M1-get",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "M1-get.json"
      },
      {
        "proof": "M2-add",
        "status": 201,
        "expected": 201,
        "pass": true,
        "receipt": "M2-add.json"
      },
      {
        "proof": "M2-get",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "M2-get.json"
      },
      {
        "proof": "view-image-models",
        "status": 201,
        "expected": 201,
        "pass": true,
        "receipt": "view-image-models.json"
      },
      {
        "proof": "view-higgsfield-image-models",
        "status": 201,
        "expected": 201,
        "pass": true,
        "receipt": "view-higgsfield-image-models.json"
      },
      {
        "proof": "V1-create",
        "status": 201,
        "expected": 201,
        "pass": true,
        "receipt": "V1-create.json"
      },
      {
        "proof": "V2-create",
        "status": 201,
        "expected": 201,
        "pass": true,
        "receipt": "V2-create.json"
      },
      {
        "proof": "V1-query",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V1-query.json"
      },
      {
        "proof": "V1-page-html",
        "status": 404,
        "expected": 404,
        "pass": true,
        "receipt": "V1-page-html.json"
      },
      {
        "proof": "V1-page.json",
        "status": 404,
        "expected": 404,
        "pass": true,
        "receipt": "V1-page.json.json"
      },
      {
        "proof": "V1-page.md",
        "status": 404,
        "expected": 404,
        "pass": true,
        "receipt": "V1-page.md.json"
      },
      {
        "proof": "V1-page.canvas",
        "status": 404,
        "expected": 404,
        "pass": true,
        "receipt": "V1-page.canvas.json"
      },
      {
        "proof": "V1-keyed",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V1-keyed.json"
      },
      {
        "proof": "V1-invalid",
        "status": 401,
        "expected": 401,
        "pass": true,
        "receipt": "V1-invalid.json"
      },
      {
        "proof": "V1-public-relations",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V1-public-relations.json"
      },
      {
        "proof": "V1-manifest-1",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V1-manifest-1.json"
      },
      {
        "proof": "V1-manifest-2",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V1-manifest-2.json"
      },
      {
        "proof": "V1-manifest-3",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V1-manifest-3.json"
      },
      {
        "proof": "V2-before",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V2-before.json"
      },
      {
        "proof": "V2-hide",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V2-hide.json"
      },
      {
        "proof": "V2-hidden-page",
        "status": 404,
        "expected": 404,
        "pass": true,
        "receipt": "V2-hidden-page.json"
      },
      {
        "proof": "V2-hidden-query",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V2-hidden-query.json"
      },
      {
        "proof": "V2-restore",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V2-restore.json"
      },
      {
        "proof": "V2-visible-page",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V2-visible-page.json"
      },
      {
        "proof": "F1-task",
        "status": 201,
        "expected": 201,
        "pass": true,
        "receipt": "F1-task.json"
      },
      {
        "proof": "F1-invalid-control",
        "status": 422,
        "expected": 422,
        "pass": true,
        "receipt": "F1-invalid-control.json"
      },
      {
        "proof": "F1-prepare",
        "status": 201,
        "expected": 201,
        "pass": true,
        "receipt": "F1-prepare.json"
      },
      {
        "proof": "F1-invocation",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "F1-invocation.json"
      },
      {
        "proof": "F1-private-invocation",
        "status": 404,
        "expected": 404,
        "pass": true,
        "receipt": "F1-private-invocation.json"
      },
      {
        "proof": "F2-claim",
        "status": 202,
        "expected": 202,
        "pass": true,
        "receipt": "F2-claim.json"
      },
      {
        "proof": "F2-duplicate-claim",
        "status": 409,
        "expected": 409,
        "pass": true,
        "receipt": "F2-duplicate-claim.json"
      },
      {
        "proof": "F2-store-final",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "F2-store-final.json"
      },
      {
        "proof": "F2-whole-read",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "F2-whole-read.json"
      },
      {
        "proof": "F3-task",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "F3-task.json"
      },
      {
        "proof": "F3-model",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "F3-model.json"
      },
      {
        "proof": "F3-higgsfield",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "F3-higgsfield.json"
      },
      {
        "proof": "F3-target",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "F3-target.json"
      },
      {
        "proof": "F4-done",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "F4-done.json"
      },
      {
        "proof": "F3-before-replay",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "F3-before-replay.json"
      },
      {
        "proof": "F2-replay",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "F2-replay.json"
      },
      {
        "proof": "F3-after-replay",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "F3-after-replay.json"
      },
      {
        "proof": "F2-immutable-request",
        "status": 409,
        "expected": 409,
        "pass": true,
        "receipt": "F2-immutable-request.json"
      },
      {
        "proof": "V-image-task-before",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V-image-task-before.json"
      },
      {
        "proof": "V-image-task-hide",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V-image-task-hide.json"
      },
      {
        "proof": "V-image-hidden-page",
        "status": 404,
        "expected": 404,
        "pass": true,
        "receipt": "V-image-hidden-page.json"
      },
      {
        "proof": "V-image-hidden.json",
        "status": 404,
        "expected": 404,
        "pass": true,
        "receipt": "V-image-hidden.json.json"
      },
      {
        "proof": "V-image-hidden-file",
        "status": 404,
        "expected": 404,
        "pass": true,
        "receipt": "V-image-hidden-file.json"
      },
      {
        "proof": "V-image-keyed-file",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V-image-keyed-file.json"
      },
      {
        "proof": "V-image-model",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V-image-model.json"
      },
      {
        "proof": "V-image-target",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V-image-target.json"
      },
      {
        "proof": "V-image-restore",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V-image-restore.json"
      },
      {
        "proof": "V-image-restored-file",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "V-image-restored-file.json"
      },
      {
        "proof": "F3-image-record",
        "status": 200,
        "expected": 200,
        "pass": true,
        "receipt": "F3-image-record.json"
      }
    ],
    "relations": [],
    "phase1_passed": false,
    "phase1_passed_at": null,
    "acceptance": {
      "T1": "passed",
      "T2": "passed",
      "T3": "passed",
      "T4": "passed",
      "M1": "incomplete: prompt-length limit and HTTP endpoint remain unestablished; connected-tool contract and 0–16 reference bound are recorded",
      "M2": "passed",
      "F1": "partial: exact request, model, reference links and resolution verified; unknown prompt maximum cannot be enforced",
      "F2": "passed through authenticated Higgsfield connector",
      "F3": "passed",
      "F4": "passed",
      "V1": "passed",
      "V2": "passed"
    },
    "mobile_checks": [
      {
        "proof": "F3-mobile",
        "url": "https://miscsubjects.com/a/cyrus-image-task-20261105",
        "status": 200,
        "image_loaded": true,
        "width": 390,
        "overflow": false
      },
      {
        "proof": "F3-mobile",
        "url": "https://miscsubjects.com/a/higgsfield-gpt-image-2-5",
        "status": 200,
        "image_loaded": true,
        "width": 390,
        "overflow": false
      },
      {
        "proof": "F3-mobile",
        "url": "https://miscsubjects.com/a/image-models",
        "status": 200,
        "image_loaded": true,
        "width": 390,
        "overflow": false
      },
      {
        "proof": "F3-mobile",
        "url": "https://miscsubjects.com/a/higgsfield-image-models",
        "status": 200,
        "image_loaded": true,
        "width": 390,
        "overflow": false
      },
      {
        "proof": "F3-mobile",
        "url": "https://miscsubjects.com/a/cyrus-massoumi",
        "status": 200,
        "image_loaded": true,
        "width": 390,
        "overflow": false
      },
      {
        "proof": "F3-mobile",
        "url": "https://miscsubjects.com/a/image-24827a1b-6bc6-40c9-b1b6-307861c13143-0",
        "status": 200,
        "image_loaded": true,
        "width": 390,
        "overflow": false
      },
      {
        "proof": "F3-mobile-navigation",
        "aggregate_provider_model": true
      },
      {
        "proof": "T4-mobile",
        "decorative_note_visible": true
      },
      {
        "proof": "T4-input-editor-mobile",
        "saved_and_reloaded": true
      },
      {
        "proof": "F1-copy-mobile",
        "copied_tool": "generate_image",
        "model": "gpt_image_2_5"
      },
      {
        "proof": "F2-raw-mobile",
        "complete_payloads_match": true
      }
    ],
    "contract_gaps": [
      "GPT Image 2.5 prompt-length maximum is unspecified in the source sheet, connected catalog and official Higgsfield CLI model documentation. No limit was invented.",
      "Generation was executed through the existing authenticated Higgsfield connector. The graph claim returns a dispatch; it does not itself submit a provider job. A direct HTTP endpoint for this model ID remains unestablished."
    ],
    "receipt_digest": "c057b22e9cae8726d93c869615be627a29f3f100a2309f391048c9548981fe85",
    "phase2_allowed": false,
    "phase1_checked_at": "2026-11-05T22:38:09.454879+00:00"
  },
  "body": [
    {
      "type": "json",
      "title": "Proof status",
      "ref": "#facts.acceptance"
    },
    {
      "type": "json",
      "title": "Remaining requirements",
      "ref": "#facts.contract_gaps"
    },
    {
      "type": "json",
      "title": "Raw HTTP check index",
      "ref": "#facts.checks"
    }
  ],
  "type": "article",
  "created": "2026-11-05T22:20:15.868Z",
  "updated": "2026-11-05T22:39:43.398Z",
  "version": 5,
  "hash": "8ea69c8ed70595e9081a28480475218468804f93e36ddec711a14c24eafdd229",
  "theme": "https://miscsubjects.com/article-theme.json",
  "styling": {
    "scope": "shared",
    "theme_ref": "https://miscsubjects.com/article-theme.json"
  },
  "page": "https://miscsubjects.com/a/graph-task-proofs-20261105",
  "json": "https://miscsubjects.com/a/graph-task-proofs-20261105.json",
  "markdown": "https://miscsubjects.com/a/graph-task-proofs-20261105.md",
  "calls": [
    {
      "what": "this article as a page (no key)",
      "method": "GET",
      "url": "https://miscsubjects.com/a/graph-task-proofs-20261105",
      "headers": {}
    },
    {
      "what": "this article as its object (no key)",
      "method": "GET",
      "url": "https://miscsubjects.com/a/graph-task-proofs-20261105.json",
      "headers": {}
    },
    {
      "what": "this article as Markdown (no key)",
      "method": "GET",
      "url": "https://miscsubjects.com/a/graph-task-proofs-20261105.md",
      "headers": {}
    },
    {
      "what": "the object with its hash, drafts too",
      "method": "GET",
      "url": "https://miscsubjects.com/api/jarticles/graph-task-proofs-20261105",
      "headers": {
        "x-terminal-key": "<YOUR_TERMINAL_KEY>"
      }
    },
    {
      "what": "one piece and that piece’s hash",
      "method": "GET",
      "url": "https://miscsubjects.com/api/jarticles/graph-task-proofs-20261105/at?path=facts",
      "headers": {
        "x-terminal-key": "<YOUR_TERMINAL_KEY>"
      }
    },
    {
      "what": "grep: every key or value that matches, with the path to change it",
      "method": "GET",
      "url": "https://miscsubjects.com/api/jarticles/graph-task-proofs-20261105/grep?q=owner",
      "headers": {
        "x-terminal-key": "<YOUR_TERMINAL_KEY>"
      }
    },
    {
      "what": "change pieces (set, merge, delete, append, insert, move); if-match is the hash",
      "method": "PATCH",
      "url": "https://miscsubjects.com/api/jarticles/graph-task-proofs-20261105",
      "headers": {
        "x-terminal-key": "<YOUR_TERMINAL_KEY>",
        "content-type": "application/json",
        "if-match": "<hash from the read>"
      },
      "body": {
        "ops": [
          {
            "op": "set",
            "path": "facts.example",
            "value": 1
          }
        ]
      }
    },
    {
      "what": "replace the whole object",
      "method": "PUT",
      "url": "https://miscsubjects.com/api/jarticles/graph-task-proofs-20261105",
      "headers": {
        "x-terminal-key": "<YOUR_TERMINAL_KEY>",
        "content-type": "application/json",
        "if-match": "<hash>"
      },
      "body": {
        "slug": "graph-task-proofs-20261105",
        "title": "…"
      }
    },
    {
      "what": "fetch every source, hash what came back and check the quote is in it",
      "method": "POST",
      "url": "https://miscsubjects.com/api/jarticles/graph-task-proofs-20261105/verify",
      "headers": {
        "x-terminal-key": "<YOUR_TERMINAL_KEY>",
        "content-type": "application/json"
      },
      "body": {}
    },
    {
      "what": "an Obsidian-style command",
      "method": "POST",
      "url": "https://miscsubjects.com/api/jarticles/cli",
      "headers": {
        "x-terminal-key": "<YOUR_TERMINAL_KEY>",
        "content-type": "application/json"
      },
      "body": {
        "command": "backlinks",
        "file": "graph-task-proofs-20261105"
      }
    }
  ],
  "entities": {
    "graph-task-proofs-20261105": {
      "id": "graph-task-proofs-20261105",
      "label": "Graph task proofs",
      "type": "task",
      "page": "https://miscsubjects.com/a/graph-task-proofs-20261105",
      "json": "https://miscsubjects.com/a/graph-task-proofs-20261105.json"
    }
  },
  "relationships": {
    "upward": {
      "total": 0,
      "offset": 0,
      "limit": 50,
      "items": [],
      "next": null
    },
    "downward": {
      "total": 0,
      "offset": 0,
      "limit": 50,
      "items": [],
      "next": null
    },
    "sideways": {
      "total": 0,
      "offset": 0,
      "limit": 50,
      "items": [],
      "next": null
    },
    "references": {
      "total": 0,
      "offset": 0,
      "limit": 50,
      "items": [],
      "next": null
    },
    "referenced_by": {
      "total": 0,
      "offset": 0,
      "limit": 50,
      "items": [],
      "next": null
    }
  },
  "hierarchy": {
    "paths": [],
    "order": "subject to parent to ancestor",
    "complete": true,
    "cycles": [],
    "limits": {
      "depth": 12,
      "objects": 250
    },
    "unresolved_refs": []
  },
  "reference_contract": {
    "canonical_id": "slug",
    "entity_lookup": "entities[ref]; # resolves to this object via self_ref",
    "self_ref": "graph-task-proofs-20261105",
    "entity_fields": "page and json are canonical object links; source_url is the external source",
    "directions": {
      "upward": "Parents and collections containing this object; predicate distinguishes location from membership.",
      "downward": "Objects naming this object as their parent, container or collection.",
      "sideways": "Associations and objects sharing a direct parent.",
      "references": "Objects referenced by this record.",
      "referenced_by": "Published articles referencing this record."
    },
    "predicates": {
      "part_of": "Declared parent hierarchy.",
      "located_in": "Location asserted on this object.",
      "associated_parcel": "Associated parcel, a separate object with its own jurisdiction and facts.",
      "member_of": "Collection membership, not geographic containment.",
      "included_in": "Editorial nesting, not geographic containment.",
      "shares_parent": "Shares the identified parent; no other relationship is implied.",
      "related_to": "An association with no more specific predicate recorded."
    },
    "scope": "Published article objects; Atlas inventories have their own counted, paged links. An association does not transfer facts or jurisdiction. An absent neighborhood means no neighborhood relationship is recorded."
  },
  "hash_spec": {
    "algorithm": "sha256",
    "encoding": "lowercase hexadecimal",
    "scope": "stored record; hash is also the write concurrency token",
    "included_keys": [
      "body",
      "created",
      "facts",
      "kind",
      "schema",
      "slug",
      "status",
      "title",
      "type",
      "updated",
      "version",
      "visibility"
    ],
    "field_overrides": {
      "schema": "jarticle/1"
    },
    "canonicalization": "Select included_keys from this response, apply field_overrides, recursively sort object keys using JavaScript Object.keys().sort(), retain array order, serialize primitives with JSON.stringify, join without whitespace, hash UTF-8 bytes.",
    "updated_included": true,
    "generated_fields": "All fields absent from included_keys are excluded. Relationship counts and theme references are generated and can change without changing the stored-record hash."
  }
}