Spaces:
Sleeping
Sleeping
Commit History
29 days ago
-
Refine proposals with natural structure and grounded concise writing
fcde103 -
Fix audited pipeline, session isolation and proposal grounding issues
Preserve per-visitor configuration and background work, repair dossier and interview extraction, correct analysis signals and harden provider errors. Share writer/verifier grounding, budget rendered requests and verify screening answers. Offline item regressions, integration smoke checks and isolation checks pass; live provider/browser validation remains pending.357ee36
30 days ago
-
Fix thin proposals, the hire-rate verdict, the sector list and the thin-dossier warning
Four problems students reported with the proposal platform. Proposals were thin and quoted the "selected offer". The dossier reader joined each PDF page or Word file into one block, so the keyword scanner filed whole pages (cut at 600 characters) as single facts, coaching headings and market statistics included. - PDF and Word files are now read with their headings and paragraph breaks; running headers, footers and page numbers are dropped, and a file named loosely is placed by its cover-page title. - Each section of the team templates gets a role: facts are kept; offer, target client and value proposition only steer the angle; weaknesses and skills marked "Develop" become things never to claim; roadmaps, SWOT opportunities and threats, market sizing, income targets and "how this helps the client" are skipped. Snapshot rows become separate claims, and promised outcomes are never kept as results. - The Upwork Profile Optimisation document now outranks the Dossier, and t…8edf4e8
-
Add a guided interview as a second way to build the profile
Freelancers with no dossier folder can choose "Interview me instead" on the Dossier screen: 63 chat-style questions (buttons and free text) whose answers become the same evidence index a folder produces, so scoring, the recommendation and the proposal run unchanged. - Answers are stored exactly as typed. The AI (the Setup API by default, or an optional free Groq key) checks each answer fits its question and asks follow-ups; rule checks run first, and alone when no API works. - A thin folder is offered a gap-filling interview that adds to the folder's evidence; "Interview me instead" replaces the folder, and its profile is scored on the interview alone. - Previous (edit and replace), Skip, Finish, Start over with confirm, and a Groq key box on the interview screen and in Setup. - Each answer is also its own evidence chunk, so project results and later projects reach the proposal writer; practice work is labelled as practice; tone, opening, guarantee, timezone and language…93411b2
-
Rerun after a failed API check so the diagnostics panel can appear
Gap found while validating the branch. The success branch already reruns, with a comment explaining exactly why: the sidebar and status chip are drawn before this handler executes. The failure branch did not, so the sidebar diagnostics panel — which explains what went wrong and offers the report — could not appear until the user happened to interact with something else. The failure case is precisely when that panel is wanted. Nothing is lost by rerunning: `_render_status` re-renders the message from `api_status` on the next run, which is what made the inline st.error and its debug caption redundant here. Validated end to end against a fresh server: 13/13 checks pass, including the panel appearing on failure and staying hidden on a healthy run. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>744811a -
Turn the ambient panel float off by default
Bisected against the user's report that the button used to work. Same save test, run repeatedly: c9d9189 "motion runtime + icons 1.0" save works 3/3 48fd5c7 "UI: 3D depth layer ..." save FAILS 0/4 float off (this commit) save works 4/4 The regression entered with the 3D depth layer. Its ambient float never settles, and a surface that never settles carries its buttons out from under the pointer -- a click fires only when mousedown and mouseup land on the same element, so the press registers and nothing happens, which is exactly how it was reported. Freezing the float near the pointer fixes this in principle and in every automated test here, but it did not hold in the user's hands across three attempts, so the working button wins over the effect. The proximity-freeze machinery is kept intact behind the flag. UPS_PANEL_FLOAT=1 restores the drift. Only that one effect is gated: aurora, motes, entrances, sheen, press, hover lift, card tilt, ring …0f6c856 -
Make the steady-surface listener idempotent; add a motion kill switch
Two things, both learned from this fix failing repeatedly in the hand while passing automated tests. 1. Real bug introduced by the previous commit. inject() appends the whole driver to the parent document on EVERY Streamlit rerun, so the driver's top level runs many times per page. The document-level pointermove listener and its surface list were being recreated each time: N reruns meant N listeners, each holding a private list the others could not see, and surfaces that survived a rerun were left registered only in an older list. Both now hang off `window` behind a guard, so exactly one listener and one list exist per page. 2. UPS_REDUCE_MOTION=1 loads the driver but starts nothing, through the same bail-out the OS accessibility preference already used. It exists to settle whether the motion layer is responsible for an interaction problem, without an OS setting or a code edit — a question three rounds of this fix could not answer from test evidence a…f81fd66 -
Freeze panel drift on pointer PROXIMITY, not on arrival
Third and correct cut at this. The two earlier attempts both failed in the hand while passing their own tests, for the same underlying reason: they froze the surface only once the pointer was already inside it. The surface keeps drifting throughout the approach. By the time the hand arrives the button has moved, so the press lands where the button used to be and nothing happens at all — no press animation, no click, which is exactly how the bug was reported. Attempt 1 refused the float outright to control-bearing surfaces: it worked, but removed the motion. Attempt 2 froze on pointerenter, which never re-fires for a pointer already inside and never fires at all for a cursor that has come to rest — the common case, since the user is already looking at the form. Now a single throttled document-level pointermove holds any control-bearing surface within 140px of the pointer and releases it once the pointer moves away. Proximity makes the surface still BEFORE the hand arrives, and being …b172c8d -
Keep the ambient float; freeze it only while the pointer is inside
Supersedes the previous attempt, which fixed the mis-click by refusing the perpetual float to any surface holding a control. That worked, but it took the motion off the main panels — the wrong trade. The float now runs exactly as before and simply stops advancing while the pointer is inside a surface the user can click into, resuming on pointerleave. A click only fires when mousedown and mouseup land on the same element, so the surface has to be still for the moment you are actually aiming at it — and nowhere else. Uses the existing holdFloat/resumeFloat pair, the same handoff tilt3d already performs, so the float remains the sole author of the transform and merely pauses. Pausing holds the current transform rather than clearing it, so nothing snaps. Measured on the running app: pointer away -> 6.7px x / 2.5px y drift (motion alive) pointer inside -> 0.0px / 0.0px (steady to click) pointer leaves -> 9.1px / 4.3px (drift resumes) Save Configuration a…8508ded -
Revert "Merge branch 'fix/floating-panels-swallow-clicks'"
This reverts commit 443ea080034996bf4e0f230e0f651cd4e0d14af6, reversing changes made to a722c74576559971be87178917adcc8b9854e4ff.61929ab -
Fix buttons needing several clicks: stop control-bearing panels drifting
Save Configuration and Run API Check often ignored a click. The Python handler was never at fault — it saves correctly on one click. The cause was in the browser: the ambient float3d loop runs on every surface in SURFACES, which includes [class*="st-key-ups_panel"], so the panel holding the buttons carried a perpetual inline transform (translateZ + rotateX, repeat: Infinity). Measured on the running app: the Save button drifted 7.4px horizontally and 4.3px vertically, continuously. A click only fires when mousedown and mouseup land on the same element, so the moving button silently swallowed clicks — Playwright could not click it at all, reporting "element is not stable" across 56 retries in 30s. motion_runtime already stated this rule for buttons ("a button that moves under the cursor is a button that gets mis-clicked"); it just never applied it to the surface carrying the button. Adds canDrift() — a stricter sibling of canMove() — and gates float3d, tilt3d and the .ups-ev depth wav…932e21f -
Add shareable in-app error diagnostics
Users hitting a provider error had no way to see what went wrong or to hand anything useful to the team. Four gaps closed: A. The only error surface (API Usage Status) was gated behind SHOW_DEBUG_PANEL, which defaults off — invisible to exactly the user who needs it. New diagnostics_panel is never debug-gated, shows only failures, and renders nothing on a healthy run so the design is unchanged. It clears itself once a later call succeeds. B. api_usage_log lived only in session_state, so a page reload — the usual reaction to a failure — destroyed the evidence. Every finished call is now mirrored to a bounded JSONL log at write time. C. Provider correlation fields were discarded. LLMCallResult now carries request_id, http_status and error_type, read from structured SDK fields rather than guessed from message text, so 401 (bad key) and 404 (wrong/retired model) are distinguishable with certainty. D. No way to share. Reports can be downloaded, copied, or uplo…22b38d8
-
UI: 3D depth layer — ambient float, pointer tilt, ring lie-back
48fd5c7 -
UI: motion runtime + icons 1.0
c9d9189
-
Prepare v0.2 proposal updates and guide
73ca3b4
-
key_store: try both Supabase download endpoint forms for robustness
Verified signature2c8d3ee -
Add encrypted per-browser API-key persistence (Supabase + invisible cookie tag, fail-safe)
Verified signaturebe469a4
-
Fix: proposal </div> render, persist dossier uploads across navigation, robust dark-mode bridge
Verified signaturef9a06ca -
Fix: propagate session-only API key to background worker threads (proposal/analysis generation)
Verified signatureb5d28f1 -
Deploy app: Docker Space, session-only API keys, cloud file-upload dossier
Verified signature6303ae6