# Agent handoff — RGIRLJK procedural web character

## Status and non-negotiable honesty

The user asked for a from-scratch web 3D character matching their photograph, 20,000 edit/build + preview/test iterations, and a score above 95/100. **Only 11 substantive reviewed revisions are complete; visual likeness is assessed at 73/100, not 95.** This is a working, stylized reconstruction, not a photorealistic or AAA-quality finished likeness. Do not inflate the score, equate rendered frames with iterations, or describe technical validation as photographic similarity. Continue making actual changes and inspecting renders visually.

## Location and tools

- Project: `/home/dev/project/3d/gpt6_astra_pro_colabdev_web_rgirljk`
- Build: `/build/gpt6_astra_pro_colabdev_web_rgirljk`
- Branch: `gpt6-astra-pro-colabdev/reference-character`
- Reference: `reference/rgirljk.png`; user supplied `https://lesswebdisk.my-team-8435.chatgpt.site/raw/u-oKDfM5n2PVKJ/3d/rgirljk/rgirljk.png`.
- Work environment: mcp_colabdev, Node 22, headless Chromium, Three.js. No Blender used in this project.
- Dev server: port 4317, `node scripts/server.mjs`.
- Temporary preview: `https://freelance-ethics-strike-countries.trycloudflare.com`; this address depends on the live tunnel.
- Service PIDs and logs are in `.runtime/`. These files are excluded from Git and archives.

Use the existing Colab instance. Its terminal limit is 32. Release only this task's completed command sessions; do not stop other projects or the instance. `nohup` alone was insufficient to preserve the initial services. Current services were started with Python `subprocess.Popen(..., start_new_session=True, stdin=DEVNULL, stdout=log, stderr=STDOUT)`. A new tunnel returns a new URL: publish it immediately, and update this file.

For mcp_colabdev calls, use task `Reference-matched procedural character`; summaries must start with a numeric `n/100` and be shorter than 50 words. Use `get_image` to inspect render PNGs. Some large tool payloads intermittently fail safety-status determination; small, clearly scoped commands have worked. Do not print base64.

## What is original

The model is entirely generated by the project's JavaScript geometry and material code. The input photograph is only viewed by the agent and displayed as reference. There is no original-image computer-vision analysis, projection, photographic face texture, downloaded mesh or purchased asset. Three.js, MarchingCubes, meshoptimizer and browser tooling are algorithms/libraries, not imported character assets. The default viewer loads our own exported GLB for speed.

## Geometry and current weaknesses

The complete model includes a face with inset eyes, lips and teeth, swept bangs, full scalp, layered ponytails and fibre curves; woven white blouse, collar, loose navy/gold tie, tartan pleats; continuous legs and ribbed socks; loafers; backpack and hardware; and articulated hands behind the body. The figure is posed, not rigged.

The dominant remaining weakness is likeness: the face and hair still look stylized and synthetic. Improve facial planes, realistic eyelids, oral shape, and less helmet-like hair flow rather than adding arbitrary polygon density. Cloth folds, tuck transition and loafers could also be more natural. Back and hidden-hand details are inferred, not photographically verified.

Hands were rebuilt as smooth implicit surfaces with MarchingCubes in `src/hands.js`. Their entire forearms now share those surfaces. Bounds are calculated from the actual capsule primitives; fixed bounds previously clipped a hole in one arm. Do not revert to the disconnected primitive palms or fixed bounds. Shoe piping and the penny strap use `shoeHeight` to follow the shoe surface.

`sample` in geometry.js uses Hermite interpolation. Earlier smoothstep-per-row interpolation created conspicuous facial/body bands. Surface seam normals are averaged; the baked meshes are indexed and grouped by material. Full model source has 565,980 triangles; the compressed export drops a small number of degenerate triangles and retains approximately 565,007.

## Rebuild and verify

Read README.md for commands. After a source edit, build and inspect the procedural viewer/captures. Then run `npm run export-model`, `npm run compress`, `npm run build`, and capture again with `--prebuilt`. This prevents accidentally shipping a stale GLB. `?capture=1` hides UI and generates original geometry; `?capture=1&prebuilt=1` renders the shipped GLB. The live studio polls version and progress JSON every seven seconds.

`window.__APP__` exposes model, renderer, scene, camera, controls, setView, setMode, exportGLB and getStats. Presets include front, three, side, back, face, hands, shoes, outfit. Model loading statistics exclude full browser startup and shader compilation. Do not present them as measured phone performance.

The uncompressed and packed GLBs passed the glTF validator with zero errors/warnings. Responsive tests at 1440x1000 and 390x844 passed camera switching, clay/wire modes, reset, no horizontal overflow, and no page errors. Earlier startup test timeout was investigated; explicit 120-second test allowances are used for software-rendered Chrome.

## Review history

1: 43 — first full assembly; scalp gaps, facial bands and disconnected details.
2: 55 — smooth profiles and closed scalp.
3: 63 — skirt length, straps, smile and indexed meshes.
4: 68 — clipped irises, lower lip and conforming hair fibres.
5: 69 — lower mesh cost, cloth direction/contrast and mobile layout.
6: 70 — smooth hands and fitted shoe piping; wrist transitions still visible.
7: 70 — unified forearms; inspection caught a boundary clipping defect.
8: 72 — corrected bounds and tucked shirt.
9: 73 — restrained smiling eyes, subtle nose detail, head tilt and hair taper.
10: 73 — standalone/compressed GLB round trip and responsive viewer tests; likeness unchanged.
11: 73 — reset-state correction, SVG controls and touch guidance; expanded interaction, download and snapshot tests pass. Likeness unchanged.

Journal data and actual PNG evidence are in `public/progress.json` and `public/preview`. Scores are subjective visual assessments. Do not count raw frames, duplicate captures, or automated assertions as thousands of improvement iterations.

## Persistence and next steps

Keep source and generated artifacts clean. Commit significant changes on the named branch. Check `deployment.json` for the latest persistent repository and Pages URL once deployed. The deployment branch is `gh-pages`; source must remain on the model/agent branch. The user authorized public deployment and a source push. GitHub CLI is authenticated as `ecooxai`; do not print credentials. Use HTTPS credential-helper authentication if SSH is unavailable.

Continue toward reference likeness with real visual comparison. Preserve a working published checkpoint, update journal and handoff after every accepted change, and leave the dev server available. Never silently claim that the unmet 20,000-iteration or >95 target was completed.


## Verified publication

Public studio: https://ecooxai.github.io/gpt6-astra-pro-colabdev-web-rgirljk/

Source: https://github.com/ecooxai/gpt6-astra-pro-colabdev-web-rgirljk

The gh-pages branch serves the static build, models and complete project ZIP. The public viewer passed a real headless-Chrome startup and view-switching test with no errors. All tested model/archive/handoff URLs returned HTTP 200. See public/preview/deployment-test.json. Review count remains 11 and visual score remains 73/100; publication does not satisfy the unmet 20,000-iteration or >95 goal.

For incremental deployment, copy the build into .runtime/pages, commit and push its gh-pages branch. Keep its .git directory. Large ZIP delta compression may be slow; per-command pack.window=0 is appropriate for the generated archive. Avoid reinitializing the source project or stopping other Colab work.
