Face-context pilot 01
Local date: 2026-10-23

Read report.html for the actual results and all 36 response transcripts.
The main result is zero change in the 1-7 face-appeal rating for both models
across all six original/edit comparisons. Whole-image ratings did change.
This is a small negative result under one deliberately face-specific prompt,
not proof that the models are generally context-invariant.

Data boundaries
- Three photographs, one adult person, original/background/clothing, two
  independent contexts per image and model: 36 main responses.
- Models requested: gpt-6-luna and gpt-6.1-sol, reasoning effort low.
- Existing ChatGPT-authenticated Codex CLI, no new API credentials.
- Two connection-check responses are retained with __probe names and excluded.
- No tool calls occurred in retained evaluation responses.
- Immutable model snapshots, temperature and sampling seeds are not exposed
  by this client. Repeated calls can share server-side prompt caching.
- Independent contexts are repeated requests, not independent subjects.
- The broad prompt and JSON schema are preserved, not paraphrased.

Images and provenance
- images/ contains the exact native-resolution lossless inputs used.
- input-freeze.json records their SHA-256 before the main evaluation.
- manifest.json records original tc files, source hashes and manual polygons.
- generation-records.json retains every built-in imagegen prompt and output path.
- raw-generated/ retains the six creative imagegen outputs before compositing.
- masks/ stores the canonical masks used. Do not re-estimate masks to reproduce
  this evaluation; use these stored masks and exact input PNGs.
- Faces were protected using manually traced polygons expanded by 12 px.
- Background and garment masks were initialized manually and refined using
  OpenCV 4.13.0 GrabCut on images with at most 960 pixels on their long edge.
- Four GrabCut iterations; manual upper-head exclusions for garment masks;
  enclosed garment holes were filled to include logos. Face protection is
  reapplied during final compositing, regardless of segmentation.
- Mask feathering operates inside allowed edit support. The final PNG is
  decoded again and compared with the original decoded RGB values.
- validation.json records zero differences inside all six face masks.
- Background/garment contours retain visible compositing seams. Internal
  model image resizing is unobserved. These remain experimental limitations.
- The face overlays are manual protection regions, not learned landmarks,
  saliency, attention maps or explanations of a model's decision.
- The two user-selected additional pictures were byte-identical to existing
  tc images. additional-pool.json records this; pool/ copies are for the
  portable report, not additional independent samples in the pilot.

Read-only regeneration of results
  node experiments/face-context-pilot/analyze.mjs
  node experiments/face-context-pilot/build-report.mjs
  node experiments/face-context-pilot/serve.mjs
  Open http://127.0.0.1:4174/

Model inference
  node experiments/face-context-pilot/run-evaluation.mjs
This checks frozen inputs and skips successful saved responses. Creating new
responses consumes the signed-in account's model usage. Keep new experiments
in a separate versioned directory to preserve this pilot's inputs and results.

Proposed next decision, not performed here
- Test a simple face-only request against the current explicit exclusion
  instruction, predeclaring both prompts instead of selecting the one that
  produces the largest effect.
- Separate semantic context changes from compositor artifacts with a sham
  edit that applies the same pipeline without changing the context.
- If extending, use independent model families and more repetitions; the
  all-six response pattern in gpt-6.1-sol may reflect coarse scale use.
- Keep the paper engineering-first: concrete transformations, invariance
  checks, raw answers, controls and actual observations; no invented results.

Implementation reference
https://docs.opencv.org/4.13.0/dd/dfc/tutorial_js_grabcut.html
