Spaces:
Sleeping
Sleeping
Commit History
-
Merge pull request #20 from vatche-t/fix/hf-jsx-mime
Vatche ThorossianUnverified signatureFix JSX MIME type on Spacesd3ca53d -
Fix JSX MIME type on Spaces
vatche.thorossian +1: OpenAI CodexCo-authored-by: OpenAI Codex <codex@openai.com>e7f005d -
Merge pull request #19 from vatche-t/fix/hf-space-deps
Vatche ThorossianUnverified signatureFix Hugging Face Space dependenciesddd24fd -
Fix Hugging Face Space dependencies
vatche.thorossian +1: OpenAI CodexCo-authored-by: OpenAI Codex <codex@openai.com>237c6a3
-
Merge pull request #18 from vatche-t/fix/fallback-user-copy
Vatche ThorossianUnverified signaturePolish fallback report copy3668a79 -
Polish fallback report copy
vatche.thorossian +1: OpenAI CodexCo-authored-by: OpenAI Codex <codex@openai.com>bf2a74c -
Merge pull request #17 from vatche-t/fix/live-structure-fallback
Vatche ThorossianUnverified signatureFix live structuring fallback0bf47fb -
Fix live structuring fallback
vatche.thorossian +1: OpenAI CodexCo-authored-by: OpenAI Codex <codex@openai.com>c4889d4 -
Use valid Hugging Face Space metadata color
vatche.thorossian +1: OpenAI CodexHugging Face Spaces rejects colorTo=orange; switch to the allowed yellow value so the Space accepts README metadata. Co-authored-by: OpenAI Codex <codex@openai.com>f771d43 -
Merge pull request #16 from vatche-t/feat/harden-structure-prompt
Vatche ThorossianUnverified signatureMerge structure prompt hardening after Codex-assisted local review. Verified locally: uv run pytest tests/ -q passed with 38 tests; uv run ruff check . passed. Decision: keep quality floors as prompt rules for demo reliability. Co-authored-by: OpenAI Codex <codex@openai.com>d410f21 -
Harden structuring prompt for honest, fuller reports
ClaudeUnverified signatureLive Modal testing showed the structuring model overclaimed ("data loss/ security") and produced only one missing-info item, weakening the Missing Info card (the product differentiator). Tighten STRUCTURE_PROMPT: - Ban data-loss/security/privacy/backend-consequence claims unless visible or tester-stated. - "critical" only for a completely and visibly blocked core flow with no workaround — never for an inferred/possible consequence; explicit high/ medium/low guidance. - Require 3-5 specific missing_info questions (the most important field). - Require at least 3 regression_tests and at least 3 edge_cases. Kept as prompt rules (schema minimums stay at 1) so a slightly-short response still renders in the demo instead of erroring. Add a test guarding the rules. https://claude.ai/code/session_01JE4YVLBWnk188Yu5sib59ye4e23c5 -
Merge pull request #15 from vatche-t/docs/field-notes
Vatche ThorossianUnverified signatureMerge Field Notes draft after Codex-assisted local review. Verified locally: uv run pytest tests/ -q passed with 37 tests; uv run ruff check . passed. Decision: keep the draft as a grounded report and fill artifact checklist after the live demo pass. Co-authored-by: OpenAI Codex <codex@openai.com>8ca5890 -
Merge pull request #14 from vatche-t/feat/tester-note
Vatche ThorossianUnverified signatureMerge tester-note input after Codex-assisted local review. Verified locally: uv run pytest tests/ -q passed with 37 tests; uv run ruff check . passed. Decision: keep the note upload-only so gallery examples remain canned fixtures. Co-authored-by: OpenAI Codex <codex@openai.com>aaed1c0 -
Add Field Notes draft
ClaudeUnverified signatureWrite docs/FIELD_NOTES.md (the Field Notes deliverable): the problem, the honest-small-model approach and two-call pipeline, why ~1.3B is enough for a narrow QA task, where small models struggle and the mitigations, the key engineering decisions (gradio.Server Off-Brand, canonical contract, Modal, mock mode, client-side exports), and the Codex review collaboration. Leaves a checklist of before/after artifacts to capture during the demo pass. https://claude.ai/code/session_01JE4YVLBWnk188Yu5sib59y08e4d78 -
Add tester-note input for uploaded screenshots
ClaudeUnverified signatureThe pipeline accepted a tester note end-to-end but the UI never collected one. Add an optional one-line note field under the drop-zone; analyzeUpload now sends the trimmed note in the POST body so it reaches vision + structuring. reset() clears the note. Examples are unaffected (they ship canned reports). https://claude.ai/code/session_01JE4YVLBWnk188Yu5sib59yd1123c8 -
Merge pull request #13 from vatche-t/feat/export-buttons
Vatche ThorossianUnverified signatureMerge real export buttons after Codex-assisted local review. Verified locally: uv run pytest tests/ -q passed with 37 tests; uv run ruff check . passed; browser smoke confirmed real export labels and no fake Jira-created copy. Co-authored-by: OpenAI Codex <codex@openai.com>9ecb6cb -
Wire export buttons to real copy/download
ClaudeUnverified signatureB5c: the results export bar now performs real actions instead of demo toasts. - Copy Jira: copies Jira wiki markup to the clipboard. - Copy GitHub issue: copies GitHub-flavored Markdown to the clipboard. - Download CSV: downloads the regression tests as buglens-tests.csv. Formatting is done client-side from the report payload already in the browser, so exports work for both gallery examples and live uploaded reports (which have no server-side id). Output mirrors buglens/render.py. Relabeled "Create Jira issue" to "Copy Jira" — we copy markdown, we don't actually file tickets, which keeps the UI honest. https://claude.ai/code/session_01JE4YVLBWnk188Yu5sib59yae635a0 -
Merge pull request #12 from vatche-t/feat/frontend-upload
Vatche ThorossianUnverified signatureMerge frontend upload workflow after Codex-assisted local review. Verified locally: uv run pytest tests/ -q passed with 37 tests; uv run ruff check . passed; browser smoke confirmed gallery results render correctly. Decision: keep gallery examples on mock GET while uploaded screenshots POST to live analysis, with ref-backed object URL cleanup. Co-authored-by: OpenAI Codex <codex@openai.com>5cdf6b3 -
Fix uploaded screenshot URL cleanup
vatche.thorossian +1: OpenAI CodexUse a ref-backed object URL cleanup path so uploaded screenshot previews are revoked even when an upload fails before React re-renders. Co-authored-by: OpenAI Codex <codex@openai.com>b5ee86a -
Wire drop-zone to real upload analysis
ClaudeUnverified signatureB5b: the frontend drop-zone now performs real analysis instead of triggering an example. - IdleView: hidden file input; click or drop a PNG/JPG calls analyzeUpload. - analyzeUpload(file): previews the uploaded screenshot (object URL), reads it to base64, POSTs /api/analyze, and shows results when the response lands (so it tolerates a Modal cold start instead of racing a fixed timer). The last loading stage stays active until the result arrives; errors (e.g. mock mode's 501) surface as a toast and reset. - LoadingView/ResultsView render the uploaded image (with the file name) when present, falling back to the MockScreen for gallery examples. - reset()/pick() revoke the object URL to avoid leaks. Gallery examples still use the mock GET path, so the app stays fully explorable; uploads go live once BUGLENS_BACKEND=modal + endpoint are set. https://claude.ai/code/session_01JE4YVLBWnk188Yu5sib59y52ddaed -
Merge pull request #11 from vatche-t/feat/live-analyze
Vatche ThorossianUnverified signatureMerge live analyze upload route after Codex-assisted local review. Verified locally: uv run pytest tests/ -q passed with 37 tests; uv run ruff check . passed. Decision: keep examples available in modal mode and route only uploaded screenshots through Modal. Co-authored-by: OpenAI Codex <codex@openai.com>618f6fe -
Keep example analysis available in modal mode
vatche.thorossian +1: OpenAI CodexFix the live-analyze path so gallery examples and exports remain available when BUGLENS_BACKEND=modal; only uploaded screenshot analysis depends on Modal. Co-authored-by: OpenAI Codex <codex@openai.com>31a374d -
Merge branch 'main' into feat/live-analyze
vatche.thorossianb74c5d6 -
Merge pull request #10 from vatche-t/feat/modal-endpoint
Vatche ThorossianUnverified signatureMerge Modal endpoint after Codex-assisted local review. Verified locally: uv run pytest tests/ -q passed with 32 tests; uv run ruff check . passed; backend import smoke passed. Decision: preserve the lightweight Space client and Modal-owned model lifecycle. Co-authored-by: OpenAI Codex <codex@openai.com>a44dc01 -
Merge branch 'main' into feat/modal-endpoint
vatche.thorossian6db5f98 -
added modal
vatche.thorossian0b07b6d -
Merge pull request #7 from vatche-t/feat/structure-call
Vatche ThorossianUnverified signatureMerge structuring call after Codex-assisted local review.\n\nVerified locally:\n- uv run pytest tests/ -q -> 28 passed\n- uv run ruff check . -> all checks passed\n- structure module imports without frontend ML deps\n\nDecision: keep strict JSON parsing, one retry, and StructureError.raw for graceful UI fallback during B4 integration.\n\nCo-authored-by: OpenAI Codex <codex@openai.com>86173be -
Route uploaded screenshots to the Modal backend
ClaudeUnverified signatureB5a: add POST /api/analyze that accepts a base64 screenshot + note and runs real inference via the configured backend. - When BUGLENS_BACKEND=modal, decode the image and forward it to the Modal endpoint through buglens.backend.analyze_via_modal, returning the BugReport payload. Backend/network errors surface as 502; bad image data as 400. - In mock mode, uploaded-image analysis returns 501 with a clear message to pick an example (examples remain fully working via GET /api/analyze?id=). - Tests cover mock 501, modal forwarding, invalid base64 (400), and backend error (502), all without network. Stacked on feat/modal-endpoint (needs buglens.backend). https://claude.ai/code/session_01JE4YVLBWnk188Yu5sib59y7d6a093 -
Add Modal GPU endpoint and Space-side backend client
ClaudeUnverified signatureB4: stand up the real inference path (deploy with `modal deploy modal_app.py`). - modal_app.py: a @app.cls(gpu="A10G") container that loads MiniCPM-V 4.6 once via @modal.enter (buglens.vision.load_model) and exposes a POST @modal.fastapi_endpoint. It decodes a base64 screenshot, runs observe() then structure(), and returns the BugReport payload; StructureError comes back as 422 with the observation + raw text so the UI can degrade gracefully. Local buglens package is baked into the image (add_local_python_source copy=True). - buglens/backend.py: analyze_via_modal() posts the screenshot+note to the endpoint and returns the payload, raising BackendError on misconfig/network/ HTTP errors. requests-only, so the Space image stays light. - requirements-modal.txt: torchcodec -> av (CUDA-safe), add fastapi + pydantic. - tests: backend client payload/error paths via monkeypatched requests. Stacked on feat/structure-call (needs structure.py). https://claude.ai/code/session_01JE4…3a9fb8a -
Add structuring call (observation -> validated BugReport)
ClaudeUnverified signatureImplement Call 2 of the pipeline (docs/plans/04): - prompts.py: STRUCTURE_PROMPT describing the canonical schema by field name (so output validates directly) with the honesty/severity/regression/edge rules, plus structure_user_text() to attach the observation and note. - structure.py: extract_json() (tolerates code fences and surrounding prose), parse_report() (json + Pydantic validate), generate_json() (text-only generation), and structure() which validates, retries once with a repair instruction, then raises StructureError carrying the last raw output for a graceful UI fallback. - tests: fence/prose extraction, round-trip parse, and first-try / retry-once / fail-after-retry orchestration via sequenced fakes. No model download. https://claude.ai/code/session_01JE4YVLBWnk188Yu5sib59y31e28fb -
Merge pull request #6 from vatche-t/feat/vision-call
Vatche ThorossianUnverified signatureMerge MiniCPM-V vision call after Codex-assisted local review.\n\nVerified locally:\n- uv run pytest tests/ -q -> 22 passed\n- uv run ruff check . -> all checks passed\n- vision module imports without frontend ML deps\n\nDecision: keep the vision call dependency-injected so Modal owns model lifecycle, while the CPU frontend remains import-safe.\n\nCo-authored-by: OpenAI Codex <codex@openai.com>3582cba -
Merge pull request #5 from vatche-t/feat/readme-frontmatter
Vatche ThorossianUnverified signatureMerge hackathon-aware README frontmatter after Codex-assisted local review.\n\nVerified locally:\n- uv run pytest tests/ -q -> 18 passed\n- uv run ruff check . -> all checks passed\n\nDecision: keep the current README tag slugs as reasonable placeholders; verify exact submission slugs against the final official template/form before deadline. Keep Modal claims honest and only final if Modal is wired.\n\nCo-authored-by: OpenAI Codex <codex@openai.com>490ef7a -
Merge pull request #4 from vatche-t/fix/analyze-fetch-race
Vatche ThorossianUnverified signatureMerge analyze race fix after Codex-assisted local review.\n\nVerified locally:\n- uv run pytest tests/ -q -> 18 passed\n- uv run ruff check . -> all checks passed\n\nDecision: keep the monotonic request token so only the latest analyze response can update UI state.\n\nCo-authored-by: OpenAI Codex <codex@openai.com>97c30a6 -
Add MiniCPM-V 4.6 vision call (screenshot -> observation)
ClaudeUnverified signatureImplement Call 1 of the pipeline (docs/plans/04): - prompts.py: VISION_PROMPT (perception only; bans guessing browser/OS/device/ role/environment/backend) and vision_user_text() to append the tester note. - vision.py: build_vision_messages() (PIL image or URL), observe() running apply_chat_template + generate + decode with downsample_mode="16x" and max_slice_nums=36, and load_model() that imports transformers lazily so the module stays importable on the CPU frontend (the model runs on Modal). - tests: prompt composition, message shape, and observe() orchestration via fakes (no model download). Verified the module imports without transformers. https://claude.ai/code/session_01JE4YVLBWnk188Yu5sib59y00a4ce4 -
Add hackathon-aware README front matter
ClaudeUnverified signatureAdd the Hugging Face Space config block (sdk: gradio, sdk_version 6.17.3, app_file: app.py) so the Space builds when deployed under the org, plus the submission essentials the Field Guide requires: track/badge tags, demo and social post placeholders, and a description of the idea and technical approach. https://claude.ai/code/session_01JE4YVLBWnk188Yu5sib59yd9e8752 -
Fix stale-response race and empty results state on analyze
ClaudeUnverified signatureAddress review findings on the frontend analyze flow: - Guard setReport with a monotonic request token (reqRef) so a slower response for an earlier example can't overwrite a newer pick. reset() bumps the token to invalidate any in-flight request. - On fetch failure, call reset() after the toast so the staged timers don't leave the view in "results" with a null report (empty results screen). https://claude.ai/code/session_01JE4YVLBWnk188Yu5sib59y85d324e -
Merge pull request #3 from vatche-t/feat/app-mock-pipeline
Vatche ThorossianUnverified signatureMerge mock end-to-end Gradio Server app after Codex-assisted local review.\n\nVerified locally:\n- uv run pytest tests/ -q -> 18 passed\n- uv run ruff check . -> all checks passed\n- live boot smoke on 127.0.0.1:7860 passed for /, /api/examples, /api/analyze?id=payment, and /static/buglens-app.jsx\n\nDecision: keep static frontend assets under /static to avoid shadowing Gradio's internal routes.\n\nCo-authored-by: OpenAI Codex <codex@openai.com>3be5539 -
Serve custom frontend on gradio.Server with mock analyze pipeline
ClaudeUnverified signatureWire the buglens-ui prototype to a real backend so the four cards render from the canonical contract end-to-end (mock mode): - buglens/examples.py: the four prototype examples as validated BugReports, plus list_examples()/get_example() helpers. - app.py: gradio.Server (FastAPI) serving the custom frontend at "/", static jsx under /static, and JSON endpoints /api/examples, /api/analyze, and /api/export/{jira,github,csv}. analyze() is mock now; the Modal/ZeroGPU MiniCPM pipeline plugs in behind the same return contract. - buglens-ui: frontend now fetches /api/analyze and renders the returned payload; script srcs point at /static so we never shadow /gradio_api/*. - Tests: examples validation + endpoint smoke tests (TestClient). Booted the server and verified "/", /api/analyze, /api/examples, and static assets. https://claude.ai/code/session_01JE4YVLBWnk188Yu5sib59y85ebe4a -
Merge pull request #2 from vatche-t/feat/canonical-schema
Vatche ThorossianUnverified signatureMerge canonical schema after Codex-assisted local review.\n\nVerified locally:\n- uv run pytest tests/ -q -> 8 passed\n- uv run ruff check . -> all checks passed\n\nDecision: adopt the UI prototype shape as the single canonical contract. Downstream vision, structuring, and Gradio Server work should target this shape directly.\n\nCo-authored-by: OpenAI Codex <codex@openai.com>4856000 -
Adopt UI prototype shape as canonical contract
ClaudeUnverified signatureEvolve BugReport to match the richer buglens-ui data contract so the backend and custom frontend speak one language (per docs/plans 03/04, superseded by the prototype's shape): - Severity becomes four-level (critical/high/medium/low) with severity_why. - missing_info is [{question, why}] — the differentiator card, with reasoning. - regression_tests are Gherkin {id, title, given, when, then}. - edge_cases are {title, detail}; add summary, env table, vision_read, app, blurb. - Serialization aliases emit the exact JSON keys the frontend reads (severityWhy, visionRead, missing/q, tests, edges/t/d, env/k/v) via BugReport.to_ui_payload(). Update Jira/GitHub/CSV exporters and the schema/render tests for the new shape. https://claude.ai/code/session_01JE4YVLBWnk188Yu5sib59yb3b0eee -
Merge pull request #1 from vatche-t/feat/render-exports
Vatche ThorossianUnverified signatureMerge deterministic render exports after Codex-assisted local review.\n\nVerified locally:\n- uv run pytest tests/ -q -> 7 passed\n- uv run ruff check . -> all checks passed\n\nDecision: keep Jira classic wiki markup for v1. Add Jira Markdown-mode later as a separate export option if needed.\n\nCo-authored-by: OpenAI Codex <codex@openai.com>340bc0b -
Fix lint formatting during PR review
vatche.thorossian +1: OpenAI CodexRun the render export PR through local uv checks and apply the single Ruff formatting fix before merge. Co-authored-by: OpenAI Codex <codex@openai.com>bb173b4 -
added buglens ui sample
vatche.thorossianbec1346 -
Add deterministic render exports
ClaudeUnverified signatureImplement model-free renderers in buglens/render.py that turn a validated BugReport into the export and card formats described in docs/plans/03 and 04: - to_jira_markdown: Jira wiki markup for pasting into a ticket - to_github_issue: GitHub-flavored Markdown issue body with checkboxes - regression_tests_to_csv: stable CSV with proper escaping and \n endings - bug_report / missing_info / regression_tests / edge_cases card markdown All functions consume the single schema contract and are deterministic, so the same report always renders identically. Add tests/test_render.py covering structure, CSV escaping/round-trip, determinism, and card headers. https://claude.ai/code/session_01JE4YVLBWnk188Yu5sib59yfc1e4ac -
Document Codex contribution trail
vatche.thorossian +1: OpenAI CodexRecord the Codex-assisted planning, scaffold, stack, and schema work so the repository has an explicit contribution trail for the hackathon submission. Co-authored-by: OpenAI Codex <codex@openai.com>4685df2 -
Add verified stack foundation
vatche.thorossianee326f7 -
Initialize BugLens planning scaffold
vatche.thorossian232f5e1