Codex Log
This log tracks substantive Codex work on Iris. It is a human-readable companion to Git history, focused on what changed, what was tested, and whether the Iris quality gate passed.
2026-06-06
7819210 - first commit
- Initialized the public
irisrepository withREADME.md. - Pushed
mainto GitHub.
Validation:
- Git remote and branch tracking confirmed.
e9f54fc - Bootstrap project structure
- Added project foundation docs and contributor workflow.
- Added
AGENTS.md,CONTRIBUTING.md, repo layout docs,scripts/check_repo.sh, and source/test anchors.
Validation:
./scripts/check_repo.shpassed.
c788f8e - Add MiniCPM validation harness
- Added the Python Iris engine, OpenAI-compatible client, parser, prompts, and CLI validation harness.
- Added unit tests for parser and engine behavior.
- Ran MiniCPM-V 4.6 Instruct validation and documented that it did not pass the Iris quality gate.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris testspassed../scripts/check_repo.shpassed.- Quality gate: failed. Outputs were too generic and repetitive.
dd9aa4c - Keep handoff docs untracked
- Removed local numbered handoff markdown files from Git tracking.
- Added ignore and check-script guardrails so future local task docs stay out of commits.
Validation:
./scripts/check_repo.shpassed.
601e3db - Validate local MiniCPM4.1 reasoning model
- Pulled and ran
openbmb/minicpm4.1locally through Ollama. - Added local Ollama defaults,
IRIS_ENABLE_THINKING,/thinksupport, and a longer local timeout. - Documented Day 1b local MiniCPM4.1-8B validation results.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris testspassed../scripts/check_repo.shpassed.- Quality gate: failed. Local reasoning output still repeated generic pressures and gave implementation advice at the center.
583618e - Harden prompt retry validation
- Tightened the pressure prompt to require idea-grounded questions and removed examples that MiniCPM4.1 copied verbatim.
- Added retry feedback for generic, repeated, unrelated, and solution-shaped pressure outputs.
- Added a balanced first-JSON-object parser so multi-object model streams do not become one malformed field.
- Added stricter center-step quality checks.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris testspassed../scripts/check_repo.shpassed.- Quality gate: failed. Day 1c output was grounded but still repeated the same
pressure across rings and returned center steps like
Interview.
776e453 - Add deterministic pressure rings
- Replaced loose depth lenses with deterministic ring profiles for Reality Contact, Real Actor, Existing Alternative, and Problem Truth.
- Added retry feedback when model pressure does not start with the required ring opening.
- Documented the Day 1d local MiniCPM4.1 validation run.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris testspassed../scripts/check_repo.shpassed.- Quality gate: failed. Ring separation improved, but center outputs still
collapsed to
Interviewand severalwhy_it_bitesfields drifted into advice.
fd0655f - Harden engine validation gate
- Added stricter advice-language validation for
why_it_biteswith model retry feedback instead of code rewriting. - Changed center distillation so MiniCPM chooses
actor,situation, andassumption_to_test, while Iris only validates and formats the final action. - Added shared seed/spiral modules and
./scripts/validate_gate.pyto print spirals plus automated gate scores. - Documented the Day 1e local MiniCPM4.1 validation run.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris testspassed../scripts/check_repo.shpassed../scripts/validate_gate.py --allran against localopenbmb/minicpm4.1and returned the expected gate failure code because only 2 of 3 seed spirals passed. Quality gate: failed. Medication and flashcards passed; tool rental still failed ring separation when Ring 3 repeated the safety-gear frame from Ring 1.
787293f - Harden existing alternative ring
- Added a model-chosen
alternativefield for the Existing Alternative ring. - Added Ring 3 validation for missing, weak, product-shaped, copied, or failure-shaped alternatives while keeping MiniCPM responsible for the actual workaround choice.
- Added forbidden prior-frame prompt context so Ring 3 avoids copying earlier pressure scenes.
- Updated the gate with an
existing_alternative_namedcriterion and documented the first full 3-seed automated gate pass.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris testspassed../scripts/check_repo.shpassed../scripts/validate_gate.py --allran against localopenbmb/minicpm4.1and passed all 3 seed spirals. Quality gate: passed.
5241db6 - Add Gradio spiral UI shell
- Added
app.pyas the Hugging Face Spaces / Gradio entrypoint. - Added
iris.uiwith a custom HTML/CSS concentric-ring stage, seed buttons, streaming ring reveal, and realIrisEnginewiring. - Added UI render tests for alternative display, center display, and HTML escaping.
- Documented the Day 2a browser smoke test.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed../scripts/check_repo.shpassed.- Gradio app built successfully in a local virtualenv.
- Browser smoke test passed at
http://127.0.0.1:7860: desktop and mobile layouts rendered without horizontal overflow, and a real UI run completed 4 rings plus center from local MiniCPM4.1.
0aef82c - Polish Gradio spiral reveal
- Added named UI ring stages, live progress pills, and pending skeleton cards for ring and center model work.
- Strengthened the center presentation as the final validation action while leaving engine judgment untouched.
- Documented the Day 2b UI smoke pass.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed../scripts/check_repo.shpassed.- Browser smoke test passed at
http://127.0.0.1:7860: desktop and mobile layouts had no horizontal overflow, center pending appeared during a real run, the run completed with 4 rings plus center, and browser console errors were empty.
e64f5cd - Add Stitch atomic UI design export
- Added the Google Stitch atomic/infinite-zoom export under
stitch_iris_atomic_infinite_zoom/. - Preserved the Stitch HTML/CSS references, screenshots, design tokens, and UX flow notes as the source of truth for the Day 2 spatial UI.
Validation:
- Source export reviewed locally;
.DS_Storestayed ignored.
9839374 - Build Stage 1 Stitch spatial canvas
- Replaced the previous Gradio form/card shell with a full-bleed static spatial canvas matching the Stitch beginning state.
- Added top navigation, left depth rail, faint orbit rings, stardust, glowing central nucleus, status/depth chips, and bottom hero copy.
- Kept the validated Iris engine unchanged; Stage 2 will wire interaction back to the existing server-side engine path.
- Added the Stage 1 screenshot and validation note.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed../scripts/check_repo.shpassed.- Browser smoke passed at
http://127.0.0.1:7860: desktop1440x900and mobile390x844rendered full-bleed with no horizontal overflow.
ea9a3f3 - Wire Stage 2 spatial UI flow
- Added real Gradio controls over the Stitch-style nucleus and electrons so the spatial UI is clickable instead of static.
- Added the idea modal, Proceed flow, server-side MiniCPM pressure calls, latest electron descent, and R4 center distillation.
- Kept the validated engine unchanged and added a UI session/view bridge test.
- Documented the Stage 2 core-flow validation run.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed../scripts/check_repo.shpassed.- Browser smoke passed at
http://127.0.0.1:7860: nucleus opened the modal, Proceed returned R1 from local MiniCPM, R1-R4 clicks advanced through the engine depths, R4 reached the center, and desktop/mobile layouts had no horizontal overflow.
d87b0da - Build UI v2 canvas card checkpoint
Date: 2026-06-08
- Replaced the Day 2 circle visual layer with a static FigJam-style canvas and stacking idea/AI pressure cards.
- Added the primary idea frame, three AI pressure cards, a next-iteration idea card, and a secondary frame preview.
- Updated UI tests and docs for the v2 canvas/card checkpoint while leaving the validated engine unchanged.
- Added the Stage 1 screenshot at
docs/validation/day2-v2-stage1-canvas-static.png.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed.git diff --checkpassed../scripts/check_repo.shpassed.- Browser smoke passed at
http://127.0.0.1:7860: desktop screenshot captured at1440x900; the rendered UI had 3 AI cards, 2 idea cards, no visible circle/electron labels, and no page-level horizontal overflow. A mobile screenshot check at390x844confirmed the frame remains inside a scrollable canvas. - Iris quality gate: not rerun for this visual-only checkpoint.
4cb4509 - Wire live canvas card interactions
Date: 2026-06-08
- Replaced the static v2 canvas with a live in-memory canvas app: click-to-create frames, editable idea cards, Proceed actions, iteration cards, multiple independent frames, zoom controls, wheel zoom, and drag panning.
- Added a named Gradio API bridge so browser JavaScript calls the server-side
IrisEnginefor live MiniCPM pressure cards and center distillation. - Added API-contract tests for live pressure payloads, prior-card constraint formatting, center payloads, and the empty interactive shell.
- Kept the validated engine logic unchanged.
- Added the live validation screenshot at
docs/validation/day2-v2-live-interactive.png.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed.git diff --checkpassed../scripts/check_repo.shpassed.- Browser smoke passed at
http://127.0.0.1:7860with local MiniCPM: created Frame 1, submitted a tool-rental idea, rendered a live Reality Contact card, submitted an Idea v2 refinement, rendered a live Real Actor card, created a second independent frame, used zoom controls, drag-panned, and confirmed no extra frame was created by the drag fallback. - Final smoke metrics: 2 frames, 2 live AI pressure cards, 4 idea cards, no old circle/electron labels, no page-level horizontal overflow.
- Iris quality gate: not rerun for this visual/UI checkpoint.
b494dcc - Add live four-direction pressure cards
Date: 2026-06-08
- Changed the live canvas Proceed flow from one AI pressure card to a four-card pressure set: Constraints, Limitations, Capabilities, and Reality Contact.
- Added direction-specific prompts and engine parsing so each card is still authored by MiniCPM, with Python only enforcing format, risk-only bite language, repeat checks, and missing-field repairs through model re-prompts.
- Updated the canvas UI to render pressure sets in a two-by-two card grid, keep depth as one round per pressure set, and pass all prior pressure cards back to the engine for later iterations.
- Added tests for the four-direction payload, prior-card formatting, missing
why_it_bitesrepair, and nested missing-pressure repair. - Added the Fix 1 validation note and screenshot at
docs/validation/day2-v2-fix1-four-pressures.mdanddocs/validation/day2-v2-fix1-four-pressures.png.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed.git diff --checkpassed../scripts/check_repo.shpassed.- Browser smoke passed at
http://127.0.0.1:7860with local MiniCPM: created Frame 1, submitted a tool-rental idea, rendered four live direction cards, and showed the next editable Idea v2 card below them. - Iris quality gate: not rerun for this UI checkpoint.
6cb6709 - Harden MiniCPM split JSON parsing
Date: 2026-06-08
- Fixed a live MiniCPM failure where reasoning-mode output returned one JSON
object with
pressure_question, then a later final JSON object withwhy_it_bites. - Added targeted parser support for selecting the embedded JSON object that contains the requested key without changing the default first-object parser behavior.
- Added
pressure_questionaliases across the direction engine and repair prompts. - Treated
buildas a generic grounding stop word so placeholder ideas likebuild ideado not fail only because the model did not repeatbuild. - Added parser and engine regression tests for split thinking/final JSON output and rough placeholder input.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed.git diff --checkpassed../scripts/check_repo.shpassed.- Browser smoke passed at
http://127.0.0.1:7860with local MiniCPM: submittedbuild idea, rendered 4 live pressure cards, and avoided the previouswhy_it_bitesparse failure. - Iris quality gate: not rerun for this UI parser bugfix.
b8d5c2f - Polish canvas navigation controls
Date: 2026-06-08
- Added native-feeling canvas navigation: empty-space drag pan, wheel pan, Ctrl/Cmd-wheel and Alt-wheel zoom, keyboard zoom/focus shortcuts, toolbar pan arrows, and Focus active frame.
- Made frame headers draggable handles so individual idea frames can move independently on the canvas.
- Kept textareas and buttons as normal form controls while allowing pan/zoom around frame bodies.
- Updated README, architecture notes, UI contract tests, and the validation
screenshot/note at
docs/validation/day2-v2-canvas-navigation.md.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed.git diff --checkpassed../scripts/check_repo.shpassed.- Browser smoke passed at
http://127.0.0.1:7860: created one frame, dragged the frame header, panned empty canvas without creating an extra frame, Ctrl-wheel zoomed over the frame, toolbar pan moved the world, and Focus recentered the active frame. - Iris quality gate: not rerun for this UI navigation checkpoint.
06bb36c - Add Build Small field guide
Date: 2026-06-08
- Added
docs/BUILD_SMALL_FIELD_GUIDE.mdto preserve Khalid's hackathon guidance: Off-the-Grid, Custom UI, optional llama.cpp, Field Notes, Open Trace, demo video, social post, and Hugging Face Space submission needs. - Updated README, architecture notes, roadmap, and project brief so future work keeps local MiniCPM, custom canvas polish, load-bearing AI, and submission readiness in view.
- No engine or UI runtime behavior changed.
Validation:
git diff --checkpassed../scripts/check_repo.shpassed.- Iris quality gate: not rerun for this docs-only guidance update.
8e94961 - Keep canvas iterations contextual
Date: 2026-06-08
- Changed the canvas engine bridge so each Proceed call sends the current iteration, original idea, and full idea history to MiniCPM.
- Kept prior pressure cards as forbidden prior pressure context instead of idea text, reducing model copy/repeat loops while preserving model authorship.
- Made canvas pressure rounds open-ended instead of switching to a center card after depth 4.
- Added current-iteration grounding retries and a UI-only soft accept for the final model-authored card when repeat similarity is the only remaining issue.
- Added
docs/validation/day2-v2-infinite-context.md.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed.git diff --checkpassed../scripts/check_repo.shpassed.- Browser smoke passed at
http://127.0.0.1:7860: first idea returned 4 live pressure cards, a short second iteration returned 4 more, the frame reached Depth 02, and no model error card appeared. - Iris quality gate: not rerun for this UI iteration-context checkpoint.
05da4e9 - Keep canvas moving after grounding retries
Date: 2026-06-08
- Fixed a second-iteration UI failure where the current-iteration grounding
guard over-weighted weak words such as
allows,amazing, andapproach. - Let the canvas soft-accept a final model-authored card when current-iteration grounding is the only remaining retry failure, while preserving hard failures for malformed JSON, advice language, and wrong direction shape.
- Added a regression test for the cheap-compute / vetted-data second-iteration
case and documented the live local smoke in
docs/validation/day2-v2-current-iteration-soft-pass.md.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed.git diff --checkpassed../scripts/check_repo.shpassed.- Live local
run_canvas_engine()smoke against MiniCPM4.1 passed for the reported second-iteration wording:ok: true, 4 pressure cards, Depth 02. - Iris quality gate: not rerun for this UI bugfix.
2026-06-10
c87d6d0 - Preserve deep canvas frame memory
- Changed the canvas engine bridge so each model call includes a structured
frame-memory prompt: frame continuity, current iteration, original idea, full
user iteration history, and prior AI pressure trail with depth, direction,
pressure, and
why_it_bites. - Kept prior cards as separate forbidden pressure context so MiniCPM can stay synced with the idea's origin without copying earlier AI cards.
- Added deep-frame regression coverage for later-depth ideations in one frame.
- Added a UI soft-pass for broad idea-grounding retry exhaustion, while malformed JSON, advice language, and wrong direction shape still fail closed.
- Updated README, architecture notes, and
docs/validation/day2-v2-deep-frame-memory.md.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed.git diff --checkpassed../scripts/check_repo.shpassed.- Live local
run_canvas_engine()smoke against MiniCPM4.1 passed at Depth 06 with four user iterations and three prior AI pressure cards in one frame. - Iris quality gate: not rerun for this UI memory checkpoint.
2026-06-12
784e929 - Harden Hugging Face Space readiness
- Added Docker Space frontmatter and submission-facing README notes for the Build Small track, target awards, demo link, social link, and Space URL.
- Removed Iris frontend runtime dependencies on Google Fonts and jsDelivr; the final brief now uses the browser's local Save as PDF flow.
- Added a deterministic Gradio template patch for the Docker image so Gradio's wrapper does not load Google preconnects, the iframe-resizer CDN script, or external Gradio social-card images.
- Hardened
.dockerignoreso.env,.env.*, and.envrcstay out of the Docker build context. - Updated architecture and field-guide docs from the old canvas/circle language to the current pressure-studio product story.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.py scripts/patch_gradio_templates.pypassed.git diff --checkpassed../scripts/check_repo.shpassed.- Browser smoke passed at
http://127.0.0.1:7860: pressure studio rendered, one active idea card was ready, default Gradio utility buttons were hidden, no horizontal overflow appeared, and the rendered page contained nofonts.googleapis.com,fonts.gstatic.com,cdnjs.cloudflare.com,cdn.jsdelivr.net,raw.githubusercontent.com, orhtml2pdfreferences after applying the Gradio template patch. - Iris quality gate: not rerun; this was a Hugging Face Space readiness and submission-polish pass, not an engine-output change.
2026-06-13
56b9212 - Guard model output against template-placeholder leaks
- Added a template-leak guard so bracketed or angle-bracketed fill-in
placeholders like
[Constraint],[this], or<idea>trigger quality feedback instead of reaching the UI or CLI. - Kept soft canvas mode resilient by returning a clean honest fallback card when the local model keeps leaking template placeholders after retries.
- Added regression coverage proving soft mode never surfaces placeholder cards.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed.git diff --checkpassed../scripts/check_repo.shpassed.- Iris quality gate: not rerun; this was a model-output validation hardening change covered by targeted regression tests.
a0a1871 - Align README tags with Build Small submission format
- Replaced freeform README frontmatter tags with the hackathon's namespaced
track:,sponsor:, andachievement:tags so the submission tool can parse Iris correctly. - Added a submission-facing explanation of what Iris is, how it is built, why MiniCPM is load-bearing, and which target awards/badges the app should claim.
- Left the demo video, social post, and Space URL TODO slots untouched for Khalid to fill after recording and posting.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed.git diff --checkpassed../scripts/check_repo.shpassed.- Iris quality gate: not rerun; this was README submission metadata and narrative alignment.
c6cc4ac - Speed up Hugging Face Space Docker build
- Replaced the source build of llama.cpp with a pinned prebuilt Ubuntu x64 CPU
llama-serverarchive from the official llama.cpp releases. - Kept the runtime path on llama.cpp while avoiding a long C++ compile on the Hugging Face Space builder.
- Updated README and deploy docs to describe the prebuilt
llama-serverpath.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed.git diff --checkpassed../scripts/check_repo.shpassed.- Space deployment: built and ran at
https://build-small-hackathon-iris-pressure-studio.hf.space; logs showed MiniCPM loaded throughllama-server, the model server became healthy, and Gradio launched on0.0.0.0:7860.
2026-06-14
39be7ca - Fit Space model calls within CPU timeout budget
- Raised the live UI engine-call abort window from 90 seconds to 4 minutes so CPU Basic MiniCPM rounds can complete instead of returning all-red timeout cards.
- Set the Space default
IRIS_MAX_TOKENSto 320 because pressure cards are short and CPU generation speed is the live bottleneck. - Kept README submission TODO links untouched.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed.bash -n scripts/space_entrypoint.shpassed.git diff --checkpassed../scripts/check_repo.shpassed.- Space deployment: built and ran on
https://build-small-hackathon-iris-pressure-studio.hf.space, but a live CPU Basic pressure round still exceeded the new 4-minute client budget. That prompted a follow-up change to collapse the four direction requests into one bounded model generation.
0be287b - Fit live Space pressure rounds on CPU Basic
- Kept MiniCPM load-bearing while asking the live HTTP client for all four direction cards in one combined model call.
- Preserved deterministic sequential behavior for tests and fake clients.
- Raised the live browser/backend timeout budget to 10 minutes for CPU Basic
cold runs while keeping
IRIS_MAX_TOKENScapped. - Capped the combined live call at one attempt and tightened the prompt against generic "the idea" cards after the live Space returned four cards in about seven minutes but with weak generic wording.
- No README submission TODO slots changed.
Validation:
python3 -m unittest discover -s testspassed.python3 -m compileall iris tests app.pypassed.bash -n scripts/space_entrypoint.shpassed.git diff --checkpassed../scripts/check_repo.shpassed.
pending - Add demo, social, and Space links to README
- Added the final Live Space, demo video, and social post links to the README submission section and top quick-links banner.
- Removed the now-satisfied README TODO items for Space, demo video, and social post links.
- Left the Build Small YAML frontmatter tags unchanged.
Validation:
./scripts/check_repo.shpassed.git diff --checkpassed.