{
  "reviewedAt": "2026-10-23",
  "sourceKind": "Production editor working copy; not claimed to be a public GitHub commit",
  "excerpts": [
    {
      "file": "app/studio/smart-objects.ts",
      "start": 8,
      "end": 10,
      "code": "export function smartId(layer:Layer){return layer.psdData?.placedLayer?.id as string|undefined;}\nexport async function openSmartContents(doc:StudioDoc,layer:Layer):Promise<StudioDoc>{const id=smartId(layer),meta=unpackMetadata(doc.psdData??{}),file=meta.linkedFiles?.find((f:any)=>f.id===id);if(!file?.data?.length)throw Error('This linked Smart Object has no embedded content. Use Replace Contents to select its source file.');return readSmartFile(file.data,file.name??layer.name+'.psd');}\nexport async function readSmartFile(bytes:Uint8Array,name:string):Promise<StudioDoc>{if(bytes.length>=4&&new DataView(bytes.buffer,bytes.byteOffset,bytes.byteLength).getUint32(0)===0x38425053)return readPhotoshop(bytes.slice().buffer,name);const mime=/\\.jpe?g$/i.test(name)?'image/jpeg':/\\.webp$/i.test(name)?'image/webp':'image/png',blob=new Blob([bytes as BlobPart],{type:mime}),url=URL.createObjectURL(blob);try{const image=await loadImage(url),c=surface(image.width,image.height);c.getContext('2d')!.drawImage(image,0,0);return {...blankDoc(),version:6,name:name.replace(/\\.[^.]+$/,''),width:c.width,height:c.height,layers:[makeLayer({kind:'image',name,src:c.toDataURL(),width:c.width,height:c.height})]};}finally{URL.revokeObjectURL(url);}}",
      "sha256": "8a73282ee8da5eb3f0d93a84bcfd5f5e12372609c04bfc75962b94cf2adddaac"
    },
    {
      "file": "app/studio/smart-objects.ts",
      "start": 16,
      "end": 17,
      "code": " placed.width=content.width;placed.height=content.height;placed.transform=points.flatMap(p=>[p.x,p.y]);placed.nonAffineTransform=placed.transform.slice();Object.assign(original,{left:bx,top:by,right:bx+bw,bottom:by+bh});const src=c.toDataURL(),precise=preciseContent?positionPrecision(preciseContent,makeLayer({width:bw,height:bh,transformQuad:quad}),bw,bh):undefined;return {...l,x:bx,y:by,width:bw,height:bh,rotation:0,flipX:undefined,flipY:undefined,transformQuad:undefined,mask,vectorMask,smartFilterMask,src,precision:precise?packPrecision(precise):undefined,precisionSource:precise?precisionSource(src):undefined,strokes:[],shape:undefined,typography:undefined,textRuns:undefined,textPath:undefined,textWarp:undefined,raw:undefined,gaussian:undefined,psdData:packMetadata(original)};});return {...doc,version:6,psdData:packMetadata(meta),layers};}\nexport async function rasterizeSmartObject(doc:StudioDoc,layer:Layer):Promise<StudioDoc>{return rasterizeLayer(doc,layer);}",
      "sha256": "8a73282ee8da5eb3f0d93a84bcfd5f5e12372609c04bfc75962b94cf2adddaac"
    },
    {
      "file": "app/studio/linked-objects.ts",
      "start": 17,
      "end": 24,
      "code": "export async function writeLinkedContents(doc:StudioDoc,layer:Layer,content:StudioDoc,baseline:{key:string;hash:string},handle?:SourceHandle):Promise<StudioDoc>{\n const id=smartId(layer),linked=layer.smartObject?.linked;\n if(!id||!linked)throw Error('This Smart Object is no longer linked.');\n if(linked.key!==baseline.key||linked.hash!==baseline.hash)throw Error('The linked source changed since these contents were opened. Close and reopen Edit Contents before saving.');\n if(doc.layers.some(l=>smartId(l)===id&&layerLocked(doc,l,'pixels')))throw Error('Unlock all instances before saving linked contents.');\n const target=handle??await readLinkedHandle(linked.key,true);\n if(target.queryPermission){let permission=await target.queryPermission({mode:'readwrite'});if(permission!=='granted'&&target.requestPermission)permission=await target.requestPermission({mode:'readwrite'});if(permission!=='granted')throw Error('Write permission was not granted. The source file was not changed.');}\n const check=async()=>{const file=await target.getFile();if(file.size>512*1024*1024)throw Error('Linked source exceeds 512 MB.');const bytes=new Uint8Array(await file.arrayBuffer());if(await checksum(bytes)!==baseline.hash)throw Error('The source file was changed outside Photoshot. Close and reopen Edit Contents after Update Modified Contents.');return {file,bytes};};",
      "sha256": "a7d908e96492e3c6e5d6d82832e9b25dd8f43ef10a96748d0e465dc28d9992e5"
    },
    {
      "file": "app/studio/linked-objects.ts",
      "start": 44,
      "end": 51,
      "code": " // Build the complete parent state before opening a write stream, so codec failures cannot overwrite the file.\n const next=await updateSmartContents(doc,id,encodedContent),hash=await checksum(bytes);\n const metadata:LinkedSource={...linked,name:file.name,size:bytes.length,modified:Date.now(),hash};\n const result={...next,layers:next.layers.map(l=>smartId(l)===id?{...l,smartObject:{...l.smartObject!,linked:metadata}}:l)};\n await check();\n const stream=await target.createWritable({keepExistingData:false});\n try{await stream.write(bytes as unknown as BufferSource);await check();await stream.close();}catch(error){try{await stream.abort();}catch{}throw error;}\n return result;",
      "sha256": "a7d908e96492e3c6e5d6d82832e9b25dd8f43ef10a96748d0e465dc28d9992e5"
    }
  ],
  "productionUI": {
    "passed": true,
    "at": "2026-10-24T00:46:55.956Z",
    "url": "https://slohero.com/photoshot/editor/",
    "input": {
      "kind": "AI-generated fictional adult demonstration portrait",
      "width": 1536,
      "height": 1024,
      "sha256": "84b58e1d84978a0edbb807f81bfbc2f765ae855cbbca32976900e07f511aa6cb"
    },
    "operation": "Convert to Smart Object, duplicate, Edit Contents, Brightness 75, Update Parent Document",
    "instances": 2,
    "sharedSourceId": true,
    "bothInstancePixelsUpdated": true,
    "projectReopenExact": true,
    "psdReopenSharedId": true,
    "embeddedContentsReopened": true,
    "errors": [],
    "imageRevision": "v3: restrained intermediate facial redesign from the original textual face descriptions; text-only generation."
  },
  "checks": [
    {
      "file": "smart-object-results.json",
      "sha256": "e0010269e737b621e8ae8c391a621c0b9c2fe1fe09142421d41abd3ab0d42f23",
      "results": {
        "passed": true,
        "embeddedLayers": 2,
        "text": "내부 QA",
        "converted": true,
        "edited": true,
        "rasterized": true,
        "placementPreserved": true
      },
      "freshRun": true
    },
    {
      "file": "linked-write-render-results.json",
      "sha256": "ee112be06c0e582f3d7e1be3cbd115eaffae60a1d605c102a225db1363f80220",
      "results": {
        "passed": true,
        "checks": [
          "psd: native header, layered reopen, shared instances, immutable parent, permission denial, stale context, external conflict, abort on write failure and mid-write change",
          "psb: native header, layered reopen, shared instances, immutable parent, permission denial, stale context, external conflict, abort on write failure and mid-write change"
        ]
      },
      "freshRun": true
    },
    {
      "file": "linked-write-ui-results.json",
      "sha256": "a11424664011c7d238dfc5648e749a9ec229984a9b274cae9e67e1f831eb359f",
      "results": {
        "passed": true,
        "pngReopenExact": true,
        "parentUndoRedoDoesNotRewriteFile": true,
        "recoveredWriteContext": true,
        "externalConflictPreservesParentAndFile": true,
        "errors": []
      },
      "freshRun": true
    },
    {
      "file": "precision-linked-write-results.json",
      "sha256": "fd5f6a35b669d440fc8f0b11d04349338c9921232f6e332a9a37cef2976fd274",
      "results": {
        "passed": true,
        "checks": [
          {
            "kind": "rgb16",
            "maxError": 9.5367431640625e-07,
            "downgradePreventedBeforeWrite": true,
            "updatedEmbeddedSource": true
          },
          {
            "kind": "rgb32",
            "maxError": 0,
            "downgradePreventedBeforeWrite": true,
            "updatedEmbeddedSource": true
          },
          {
            "kind": "cmyk16",
            "maxError": 9.5367431640625e-07,
            "downgradePreventedBeforeWrite": true,
            "updatedEmbeddedSource": true
          },
          {
            "kind": "lab16",
            "maxError": 9.5367431640625e-07,
            "downgradePreventedBeforeWrite": true,
            "updatedEmbeddedSource": true
          }
        ]
      },
      "freshRun": true
    }
  ],
  "imageDisclosure": "AI 생성 시연 이미지 · 실제 인물 촬영 및 공식 협업 이미지가 아닙니다. 편집 화면과 결과는 실제 포토샷에서 만들었습니다.",
  "imageRevision": {
    "version": 3,
    "at": "2026-10-24T00:46:55.956Z",
    "method": "Text-only intermediate variation with two local adjustments; no reference photographs provided to generator.",
    "sourceSha256": "84b58e1d84978a0edbb807f81bfbc2f765ae855cbbca32976900e07f511aa6cb",
    "previousImagesRetained": true
  }
}