Mechanical peacock
Articulated enamel fan; neck connection repaired by a Codex maintainer agent
Earlier examples from earlier Kiln versions.

Drag to orbit after opening. The model starts stationary.
For your engine. The download is a standard glTF 2.0 binary (GLB) with PBR metallic-roughness materials. glTF stores materials, not lighting or tone mapping, so your engine decides how they read. This 3D view tone-maps with Review Neutral, the Khronos PBR Neutral construction with a smaller glare offset (0.015 instead of 0.04), at exposure 0.9. Its Tone mapping control also shows ACES and Linear, for comparison.
Build measurements
- Triangles
- 44,896
- Estimated draws
- 327
- Materials
- 11
- Textures
- 0
- Animation clips
- 1
- Bounds X × Y × Z
- 1.28 × 1.94 × 2.04 m
- Build warnings
- 0
Measurements come from this build.
Download this build
Runtime: 552,760 bytes. Original: 552,524 bytes.
These GLBs are build outputs of the MIT-licensed example source; no separate terms are stated for the builds.
Runtime provenance metadataSHA-256 download hashes
- Runtime GLB
- 8d753a3aba22a92beeb7bb932d51ccf49ee30e7fc52ed61bd7f202a7139b0c58
- Original GLB
- 244f0369f4a3509248a2ab8f738e92471926b09b82316b93e727f82913ea2a8c
- Source
- 6433d22d378e5b18e33ab35928b63d9aab12608b3f6474be6110a846db95553d
The example source is part of the Kiln repository. Repository licence: MIT.
These GLBs are build outputs of the MIT-licensed example source; no separate terms are stated for the builds.
Recorded authorship
Claude Opus 5 through Claude Code ·
Original source authored by claude-opus-5 in Claude Code 2.1.259; final source has an explicitly recorded Codex maintainer-agent repair.
- Source access
- Fresh project-local authoring workspace with a brief, packaged core skills and Kiln tools. Maintainer repair used the retained source.
- Inherited context
- Fresh original Claude authoring conversation; subsequent local maintainer refinement.
- Starting example
- None supplied.
- Human input
- Maintainer supplied the brief and reviewed images. Codex maintainer agent extended the neck centerline by 45 mm to join the skull, rendered motion samples, and exported the final GLB locally. The original Claude session timed out before final export. A subsequent Codex maintainer patch corrected inward body-shell winding, verified by triangle orientation and actual images from both sides. Single-sided materials were retained.
- Authoring review
- Actual GPU side, fan-motion and neutral square poster images inspected. Stylized decorative prop, not an engineering model. FanOpen inspected at 0%, 50% and 100%; continuous clearance and physical drive behavior are not certified. Some thin feather edges and partial eye bezels retain the original stylization. Engine retains SWEEP_TIGHT_TURN and SWEEP_SELF_INTERSECTION_UNCHECKED warnings; recorded in the example checks.
Neutral gallery GPU render of this exact source; source, artifact, image and camera hashes recorded, the artifact hash naming the bytes the image was rendered from.
Poster camera and render recordThe source behind this build
/**
* Mechanical Peacock — a clockwork display bird with a jewel-enamel body,
* brass armature and an articulated fan of eye-pattern feathers.
* Metres, +X forward, +Y up, +Z right. Feet at Y = 0.
*/
const meta = { name: 'Mechanical Peacock', category: 'prop', role: 'poi' };
/* ---------------------------- proportions ---------------------------- */
const BODY_Y = 0.62; // body axis height
const BODY_X0 = -0.36; // tail end of the body
const BODY_X1 = 0.26; // breast end of the body
const BODY_RY = 0.168;
const BODY_RZ = 0.140;
const HUB_X = -0.34; // fan hub centre
const HUB_Y = 0.63;
const HUB_R = 0.118; // radius of the pivot ring
const HUB_LEAN = -0.14; // radians about Z; leans the open fan forward
const FEATHER_N = 21;
const FAN_ARC = 112; // degrees either side of vertical
const L_MAX = 1.16;
const L_MIN = 0.80;
const VANE_ARC = 0.16; // backward bow of a vane, as a fraction of length
const VANE_CUP = 0.05; // cross-section cupping
const VANE_TH = 0.0038; // half thickness of a vane
const V_EYE = 0.80; // ocellus station along the vane
const TILT_SHUT = 82; // hinge angle with the fan closed
const TILT_OPEN_MID = 5; // hinge angle of the centre feather, open
const TILT_OPEN_EDGE = 23; // hinge angle of the outermost feathers, open
const NECK_RISE = 0.50;
const HEAD_X = 0.305;
const HEAD_Y = BODY_Y + NECK_RISE + 0.09;
const DEG = 180 / Math.PI;
/* ---------------------------- materials ------------------------------ */
function palette() {
return {
brass: gameMaterial(0xb98f3c, { metalness: 0.95, roughness: 0.29 }),
brassBright: gameMaterial(0xe0bc63, { metalness: 1.0, roughness: 0.16 }),
bronze: gameMaterial(0x6d5122, { metalness: 0.9, roughness: 0.46 }),
steel: gameMaterial(0x8d939b, { metalness: 1.0, roughness: 0.31 }),
enamelBlue: gameMaterial(0x18306f, { metalness: 0.25, roughness: 0.14 }),
enamelTeal: gameMaterial(0x0d6d6b, { metalness: 0.25, roughness: 0.15 }),
enamelGreen: gameMaterial(0x11633a, { metalness: 0.25, roughness: 0.16 }),
enamelViolet: gameMaterial(0x442066, { metalness: 0.28, roughness: 0.15 }),
enamelGold: gameMaterial(0xd8a83e, { metalness: 0.55, roughness: 0.2 }),
enamelCream: gameMaterial(0xe6d2a4, { metalness: 0.2, roughness: 0.3 }),
enamelInk: gameMaterial(0x0c1430, { metalness: 0.3, roughness: 0.12 }),
};
}
/* ------------------------- geometry helpers -------------------------- */
/**
* Orient a Y-axis primitive so it spans from a to b.
* Solves Euler XYZ [beta, 0, gamma] for R * (0,1,0) = normalize(b - a).
*/
function strut(name, a, b, radius, material, parent, segments) {
const dx = b[0] - a[0];
const dy = b[1] - a[1];
const dz = b[2] - a[2];
const len = Math.hypot(dx, dy, dz);
const nx = dx / len;
const ny = dy / len;
const nz = dz / len;
const gamma = Math.asin(Math.max(-1, Math.min(1, -nx)));
const beta = Math.atan2(nz, ny);
return createPart(name, cylinderGeo(radius, radius, len, segments || 10), material, {
position: [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2, (a[2] + b[2]) / 2],
rotation: [beta * DEG, 0, gamma * DEG],
parent: parent,
});
}
/**
* A closed thin vane: the cross-section loops front-to-back so the blade has
* real thickness and reads from either side. widthFn(v) returns half-width.
*/
function vaneGeo(length, widthFn, arc, thick, uSeg, vSeg) {
return parametricSurface(function (u, v) {
const ang = 2 * Math.PI * u;
const s = Math.cos(ang);
const w = widthFn(v);
const swell = 0.35 + 0.65 * Math.sin(Math.PI * v);
return [
-arc * length * v * v - VANE_CUP * s * s * w + thick * Math.sin(ang) * swell,
length * v,
s * w,
];
}, { u: [0, 1], v: [0, 0.992], uSegments: uSeg, vSegments: vSeg, periodicU: true });
}
/** Half-width of a train feather: slim quill, ovate eye lobe, drawn tip. */
function featherWidth(v, k) {
const shaft = 0.006 + 0.020 * Math.pow(v, 0.7);
const lobe = 0.062 * Math.exp(-Math.pow((v - V_EYE) / 0.17, 2));
const tip = 1 - Math.pow(v, 10);
return (shaft + lobe) * Math.max(tip, 0) * k;
}
/** Half-width of a wing covert: broad leaf. */
function wingWidth(v) {
return 0.115 * Math.pow(Math.sin(Math.PI * Math.pow(v, 0.62)), 0.85) * (1 - 0.28 * v) + 0.004;
}
/** Backward-facing surface x at the vane centreline for a given station. */
function vaneBackX(length, v, arc, thick) {
return -arc * length * v * v - thick * (0.35 + 0.65 * Math.sin(Math.PI * v));
}
/** Sample the neck centreline; t = 0 at the breast, 1 at the skull. */
function neckPoint(t) {
return [
0.20 + 0.10 * Math.sin(Math.PI * t * 0.85) + 0.04 * t,
BODY_Y + 0.02 + (NECK_RISE + 0.045) * t,
0,
];
}
function neckRadius(t) {
return 0.076 - 0.038 * Math.pow(Math.max(t, 0), 0.85);
}
/** Body cross-section scale; floored so the ends never collapse to a pole. */
function bodyK(v) {
return Math.pow(Math.max(Math.sin(Math.PI * Math.pow(v, 0.9)), 0.02), 0.45);
}
function octagon() {
const pts = [];
for (let i = 0; i < 8; i++) {
const a = (i / 8) * 2 * Math.PI;
pts.push([Math.cos(a), Math.sin(a)]);
}
return pts;
}
/* ------------------------------ build -------------------------------- */
async function build() {
const root = createRoot('MechanicalPeacock');
const M = palette();
const vaneEnamels = [M.enamelTeal, M.enamelGreen, M.enamelBlue];
const eyeRings = [
[M.enamelGold, M.enamelViolet, M.enamelInk],
[M.enamelGold, M.enamelTeal, M.enamelInk],
[M.enamelCream, M.enamelBlue, M.enamelViolet],
];
/* ---- enamel body shell over a brass keel ---- */
const bodyGroup = createPivot('Body', [0, BODY_Y, 0], root);
const bodyGeo = parametricSurface(function (u, v) {
const a = -2 * Math.PI * u; // Outward winding around the longitudinal body axis.
const k = bodyK(v);
const x = BODY_X0 + (BODY_X1 - BODY_X0) * v;
const droop = -0.028 * Math.sin(Math.PI * v);
return [x, droop + BODY_RY * k * Math.sin(a), BODY_RZ * k * Math.cos(a)];
}, { u: [0, 1], v: [0.02, 0.98], uSegments: 40, vSegments: 28, periodicU: true });
createPart('BodyShell', creaseNormals(bodyGeo, { angle: 55 }), M.enamelBlue, { parent: bodyGroup });
createPart('BodyCapTail', sphereGeo(0.055, 16, 12), M.enamelBlue, {
position: [BODY_X0 + 0.008, -0.002, 0], scale: [0.62, 0.97, 0.81], parent: bodyGroup,
});
createPart('BodyCapBreast', sphereGeo(0.050, 16, 12), M.enamelBlue, {
position: [BODY_X1 - 0.016, -0.002, 0], scale: [0.62, 0.89, 0.74], parent: bodyGroup,
});
// brass frame hoops around the enamel shell
const hoopStations = [0.2, 0.42, 0.64, 0.84];
for (let i = 0; i < hoopStations.length; i++) {
const v = hoopStations[i];
const k = bodyK(v);
const x = BODY_X0 + (BODY_X1 - BODY_X0) * v;
const ring = createPart('BodyHoop' + i, torusGeo(1, 0.055, 8, 34), M.brass, {
position: [x, -0.028 * Math.sin(Math.PI * v), 0],
rotation: [0, 90, 0],
scale: [BODY_RZ * k + 0.004, BODY_RY * k + 0.004, 1],
parent: bodyGroup,
});
ring.scale.z = 0.22;
}
// brass spine strip and belly keel
const spinePath = [];
const keelPath = [];
for (let i = 0; i <= 12; i++) {
const v = 0.06 + (i / 12) * 0.88;
const k = bodyK(v);
const x = BODY_X0 + (BODY_X1 - BODY_X0) * v;
const droop = -0.028 * Math.sin(Math.PI * v);
spinePath.push([x, droop + BODY_RY * k + 0.006, 0]);
keelPath.push([x, droop - BODY_RY * k - 0.006, 0]);
}
const stripProfile = [[-0.020, -0.008], [0.020, -0.008], [0.020, 0.008], [-0.020, 0.008]];
createPart('SpineStrip', sweepProfile(stripProfile, spinePath, { cap: true, up: [0, 0, 1] }), M.brass, { parent: bodyGroup });
createPart('BellyKeel', sweepProfile(stripProfile, keelPath, { cap: true, up: [0, 0, 1] }), M.bronze, { parent: bodyGroup });
/* ---- neck ---- */
const neckPts = [];
const neckScale = [];
for (let i = 0; i <= 13; i++) {
const t = -0.18 + (i / 13) * 1.18;
neckPts.push(neckPoint(t));
const r = neckRadius(t);
neckScale.push([r, r]);
}
const neckProfile = octagon();
createPart('Neck', sweepProfile(neckProfile, neckPts, { cap: true, scale: neckScale, up: [1, 0, 0] }), M.enamelBlue, { parent: root });
// brass collars: each is a two-station sweep so it follows the neck frame
for (let i = 1; i <= 5; i++) {
const t = i / 6;
const r = neckRadius(t) * 1.16;
const a = neckPoint(t - 0.022);
const b = neckPoint(t + 0.022);
createPart('NeckCollar' + i, sweepProfile(neckProfile, [a, b], {
cap: true, scale: [[r, r], [r, r]], up: [1, 0, 0],
}), M.brass, { parent: root });
}
/* ---- head ---- */
const head = createPivot('Head', [HEAD_X, HEAD_Y, 0], root);
head.rotation.z = -0.18;
createPart('Skull', sphereGeo(0.062, 16, 12), M.enamelBlue, { scale: [1.55, 1.0, 0.88], parent: head });
createPart('Beak', coneGeo(0.030, 0.125, 12), M.brassBright, {
position: [0.098, -0.012, 0], rotation: [0, 0, -96], parent: head,
});
createPart('BeakBand', torusGeo(0.028, 0.006, 6, 14), M.bronze, {
position: [0.055, -0.006, 0], rotation: [0, 84, 0], parent: head,
});
for (let s = -1; s <= 1; s += 2) {
createPart('EyeBezel', torusGeo(0.021, 0.006, 6, 14), M.brassBright, {
position: [0.040, 0.018, s * 0.049], rotation: [90, 0, 0], parent: head,
});
createPart('EyeJewel', sphereGeo(0.017, 10, 8), M.enamelGold, {
position: [0.040, 0.018, s * 0.050], parent: head,
});
}
// crest: brass wires with enamel beads
for (let i = 0; i < 5; i++) {
const spread = (i - 2) / 2;
const base = [-0.012 + 0.020 * spread * spread, 0.055, spread * 0.020];
const tip = [-0.030 + 0.055 * spread * spread, 0.155, spread * 0.070];
strut('CrestWire' + i, base, tip, 0.0045, M.brassBright, head, 6);
createPart('CrestBead' + i, sphereGeo(0.019, 10, 8), M.enamelTeal, { position: tip, parent: head });
createPart('CrestBeadRim' + i, torusGeo(0.020, 0.004, 6, 12), M.brass, {
position: tip, rotation: [0, 0, 90], parent: head,
});
}
/* ---- wing coverts ---- */
for (let s = -1; s <= 1; s += 2) {
const wingRoot = createPivot('WingRoot' + (s > 0 ? 'R' : 'L'), [0.06, BODY_Y + 0.03, s * 0.115], root);
wingRoot.rotation.x = -s * 1.31;
createPart('WingCovert', vaneGeo(0.46, wingWidth, 0.30, 0.010, 14, 20), M.enamelGreen, {
rotation: [0, 0, 120], parent: wingRoot,
});
strut('WingRib', [0, 0, 0], [-0.40 * Math.sin(2.094), 0.40 * Math.cos(2.094), 0], 0.008, M.brass, wingRoot, 6);
createPart('ShoulderBoss', cylinderGeo(0.034, 0.040, 0.030, 14), M.brass, {
rotation: [90, 0, 0], parent: wingRoot,
});
}
/* ---- legs ---- */
for (let s = -1; s <= 1; s += 2) {
const z = s * 0.088;
const hip = [0.02, 0.50, z];
const knee = [-0.06, 0.285, z];
const ankle = [0.035, 0.062, z];
createPart('HipBoss', cylinderGeo(0.036, 0.036, 0.034, 14), M.brass, {
position: hip, rotation: [90, 0, 0], parent: root,
});
strut('Thigh', hip, knee, 0.028, M.brass, root, 10);
createPart('KneeBoss', cylinderGeo(0.028, 0.028, 0.036, 12), M.brassBright, {
position: knee, rotation: [90, 0, 0], parent: root,
});
strut('Shank', knee, ankle, 0.020, M.steel, root, 10);
createPart('AnkleBoss', cylinderGeo(0.022, 0.022, 0.030, 12), M.brass, {
position: ankle, rotation: [90, 0, 0], parent: root,
});
const toes = [
[ankle[0] + 0.105, 0.013, z],
[ankle[0] + 0.055, 0.013, z + 0.058],
[ankle[0] + 0.055, 0.013, z - 0.058],
[ankle[0] - 0.072, 0.013, z],
];
for (let t = 0; t < toes.length; t++) {
strut('Toe' + t, ankle, toes[t], 0.013, M.bronze, root, 8);
createPart('Claw' + t, sphereGeo(0.014, 8, 6), M.brassBright, { position: toes[t], parent: root });
}
}
/* ---- fan hub and drive ---- */
const hub = createPivot('TailHub', [HUB_X, HUB_Y, 0], root);
hub.rotation.z = HUB_LEAN;
createPart('HubRing', torusGeo(HUB_R, 0.018, 10, 44), M.brass, { rotation: [0, 90, 0], parent: hub });
createPart('HubPlate', cylinderGeo(0.080, 0.098, 0.062, 24), M.bronze, { rotation: [0, 0, 90], parent: hub });
createPart('HubCap', cylinderGeo(0.044, 0.044, 0.020, 20), M.brassBright, {
position: [-0.052, 0, 0], rotation: [0, 0, 90], parent: hub,
});
const driveGear = createPivot('DriveGear', [-0.086, 0, 0], hub);
createPart('DriveGearBody', gearGeo({ teeth: 26, rootRadius: 0.060, tipRadius: 0.075, boreRadius: 0.014, height: 0.020 }), M.brassBright, {
rotation: [0, 0, 90], parent: driveGear,
});
const pinion = createPivot('Pinion', [-0.086, -0.118, 0], hub);
createPart('PinionBody', gearGeo({ teeth: 12, rootRadius: 0.032, tipRadius: 0.046, boreRadius: 0.010, height: 0.020 }), M.steel, {
rotation: [0, 0, 90], parent: pinion,
});
strut('DriveShaft', [-0.086, -0.118, 0], [0.12, -0.16, 0], 0.011, M.steel, hub, 8);
/* ---- the articulated train ---- */
for (let i = 0; i < FEATHER_N; i++) {
const t = (i / (FEATHER_N - 1)) * 2 - 1; // -1 .. 1 across the fan
const at = Math.abs(t);
const theta = t * FAN_ARC;
const len = L_MIN + (L_MAX - L_MIN) * (1 - Math.pow(at, 1.7));
const k = 0.72 + 0.28 * (len / L_MAX); // eye lobe scales with length
const openTilt = TILT_OPEN_MID + (TILT_OPEN_EDGE - TILT_OPEN_MID) * at * at;
const idx = i < 10 ? '0' + i : '' + i;
const socket = createPivot('FeatherSocket' + idx, [0, 0, 0], hub);
socket.rotation.x = theta / DEG;
// radial armature spoke and the fixed half of the pivot
createPart('Spoke' + idx, cylinderGeo(0.0075, 0.011, HUB_R, 8), M.brass, {
position: [0, HUB_R * 0.5, 0], parent: socket,
});
createPart('Knuckle' + idx, cylinderGeo(0.017, 0.017, 0.030, 12), M.bronze, {
position: [0, HUB_R, 0], rotation: [90, 0, 0], parent: socket,
});
createPart('PivotPin' + idx, cylinderGeo(0.0065, 0.0065, 0.052, 8), M.brassBright, {
position: [0, HUB_R, 0], rotation: [90, 0, 0], parent: socket,
});
// moving half: the feather hinge
const hinge = createPivot('FeatherHinge' + idx, [0, HUB_R, 0], socket);
hinge.rotation.z = openTilt / DEG;
for (let y = -1; y <= 1; y += 2) {
createPart('Yoke' + idx, boxGeo(0.030, 0.046, 0.008), M.brass, {
position: [-0.004, 0.023, y * 0.019], parent: hinge,
});
}
createPart('Ferrule' + idx, cylinderGeo(0.013, 0.017, 0.052, 10), M.brass, {
position: [0, 0.050, 0], parent: hinge,
});
const widthFn = function (v) { return featherWidth(v, k); };
createPart('Vane' + idx, vaneGeo(len, widthFn, VANE_ARC, VANE_TH, 12, 26), vaneEnamels[i % 3], {
position: [0, 0.030, 0], parent: hinge,
});
// brass quill riding the front face of the vane
createPart('Quill' + idx, cylinderGeo(0.0035, 0.0095, len * 0.74, 8), M.brass, {
position: [0.006, 0.030 + len * 0.37, 0], parent: hinge,
});
// the ocellus: brass bezel over stacked enamel discs
const eyeY = 0.030 + len * V_EYE;
const backX = vaneBackX(len, V_EYE, VANE_ARC, VANE_TH);
const rings = eyeRings[i % 3];
createPart('EyeBezel' + idx, torusGeo(0.057 * k, 0.0045, 6, 22), M.brass, {
position: [backX - 0.0026, eyeY, 0], rotation: [0, 90, 0], scale: [1, 1.26, 1], parent: hinge,
});
createPart('EyeOuter' + idx, cylinderGeo(0.055 * k, 0.055 * k, 0.005, 20), rings[0], {
position: [backX - 0.0025, eyeY, 0], rotation: [0, 0, 90], scale: [1.26, 1, 1], parent: hinge,
});
createPart('EyeMid' + idx, cylinderGeo(0.039 * k, 0.039 * k, 0.005, 20), rings[1], {
position: [backX - 0.0062, eyeY, 0], rotation: [0, 0, 90], scale: [1.26, 1, 1], parent: hinge,
});
createPart('EyeCore' + idx, sphereGeo(0.023 * k, 14, 10), rings[2], {
position: [backX - 0.0092, eyeY, 0], scale: [0.5, 1.26, 1], parent: hinge,
});
}
return root;
}
/* ---------------------------- animation ------------------------------ */
function animate() {
const tracks = [];
const DURATION = 2.6;
for (let i = 0; i < FEATHER_N; i++) {
const t = (i / (FEATHER_N - 1)) * 2 - 1;
const at = Math.abs(t);
const openTilt = TILT_OPEN_MID + (TILT_OPEN_EDGE - TILT_OPEN_MID) * at * at;
const lead = 0.30 * at; // outer feathers trail the centre
const idx = i < 10 ? '0' + i : '' + i;
tracks.push(rotationTrack('Joint_FeatherHinge' + idx, [
{ time: 0, rotation: [0, 0, TILT_SHUT] },
{ time: 0.35 + lead, rotation: [0, 0, TILT_SHUT - 0.18 * (TILT_SHUT - openTilt)] },
{ time: 1.55 + lead, rotation: [0, 0, openTilt + 0.22 * (TILT_SHUT - openTilt)] },
{ time: 2.15 + lead, rotation: [0, 0, openTilt - 3] },
{ time: DURATION, rotation: [0, 0, openTilt] },
]));
}
tracks.push(rotationTrack('Joint_DriveGear', [
{ time: 0, rotation: [0, 0, 0] },
{ time: DURATION, rotation: [-260, 0, 0] },
]));
tracks.push(rotationTrack('Joint_Pinion', [
{ time: 0, rotation: [0, 0, 0] },
{ time: DURATION, rotation: [563, 0, 0] },
]));
return [createClip('FanOpen', DURATION, tracks)];
}Scroll code horizontally
Brief and retained revisions
Brief summary
Create a jewel-enamel and brass mechanical peacock with custom eye-pattern feathers, a visible radial hub and an articulated opening fan.
Opus 5 initial design
Original retained draft. Final GLB QA rejected zero-length normals; no successful render at this revision.
Download opus 5 initial design sourceSHA-256: 7c04e74fe34735b124942f821db74909e5c4a09b10c0c123c338cdf0078db85a
Opus 5 geometry repair
Exact source edits repaired the invalid geometry. Four GPU views rendered; the session timed out before final export, with a visible head/neck gap.
Download opus 5 geometry repair sourceSHA-256: b36982692607a6702bfc8a004d4a18a743c2b59518d0ff20cd2b0f02982f4892
Maintainer head connection repair
Codex maintainer agent extended the neck centerline 45 mm into the skull. Original design and fan animation retained. Actual side and 0/50/100% FanOpen views inspected; final source and GLB exported locally.
Download maintainer head connection repair sourceSHA-256: b36e40be94454b469acc086260ae37399010968c14748a98fa58bffaf68d0965
Maintainer body winding repair · Shown here
Codex maintainer agent reversed the body surface sweep after inspection found all 2,240 shell triangles facing inward. Single-sided material retained. Outward winding regression test passes; both sides of the enamel body and the updated neutral poster were visually inspected.
Download maintainer body winding repair sourceSHA-256: 6433d22d378e5b18e33ab35928b63d9aab12608b3f6474be6110a846db95553d