Skip to content

Clearer projects and Sessions: archive consequences, failure reasons, how to call - #158

Merged
SaladDay merged 13 commits into
mainfrom
codex/web-ux-projects
Sep 26, 2026
Merged

SaladDay merged 13 commits into
mainfrom
codex/web-ux-projects

Conversation

@SaladDay

@SaladDay SaladDay commented Sep 26, 2026 •

Copy link
Copy Markdown
Collaborator

UX quick wins for Projects, Sessions and Agent metrics, from the Web UX review (~/.parsar/plans/new-user-install-20260925/03-web-ux-review.md).

  • UX-19: archive consequences.
    • The dialog says archiving can't be undone and how many active keys it revokes (active_key_count), and that assets and accepted work stay.
    • With active keys, Archive stays disabled until the project name is typed, using the same pattern as deleting a Skill.
  • UX-15: failure reasons in sight.
    • A failed Session's reason (as Core sends it) shows under its status: in full on the Session page, one truncated line with a tooltip in the Session log.
    • The history header has Jump to the failed Turn, which cycles through failed Turns and focuses each.
  • UX-03: how to call, from anywhere.
    • The how-to-call samples now also create a Session (POST /v1/agents/sessions, official shape, checked against SDK 3.13.0).
    • An active project's page always shows the card with a placeholder key, never the real key.
    • Getting started step 4 (See how to call) opens that card.
  • UX-17: drill down from Agent metrics.
    • An Agent's name opens its page. A nonzero Failed count links to that Agent's failed Sessions: the link's name and tooltip say so, and the column's help tip explains that the count is failed Turns.
  • UX-20: key counts. The project's Keys heading reads "3 active · 1 revoked".
  • Scrolling.
    • A new revealInPageBody scrolls only the page body, so the header stays in view.
    • It's used for step 4, and for step 2's Open System (DefaultModelsSection).

Tests

docs/web (for the backend session's review)

docs/web/protocol-coverage.md:21 (samples on the project page; POST /v1/agents/sessions), :33 (step 4 target; active_key_count in the archive dialog), :120 (api_base_url on the project page).


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith with what you need. Autofix is disabled.

The Keys heading on a project's page counted revoked keys together with
active ones ("Keys 4" beside "Active keys 3" in the list). It now reads
"3 active · 1 revoked", leaving out the revoked part at zero.
Archiving can't be undone: the contract has no unarchive. The dialog now
says so, counts the active keys it revokes from the project read, and
says assets and accepted work stay. A project with active keys is
archived only after its name is typed, as a whole Skill is deleted.
The reason Core sent for a failed Session sat in a help tip beside its
status. It now shows under the status: in full on the Session page, on
one truncated line with the full text in its tooltip in the Session log.
The history adds "Jump to the failed Turn", which shows the conversation
(the Turn table without Items), scrolls the page body to the next failed
Turn and focuses it.
The how-to-call samples also create a Session with a first message, in
the official shape of POST /agents/sessions with the pinned SDK, and say
what to put in place of <model>. An active project's page shows the same
samples as a section without any key: the export holds a placeholder and
a note says to use a key issued for the project. Getting started's last
step opens the newest active project, preferring one with a key, with
that section's heading focused.
In the By Agent table a saved Agent's name opens its page, and a nonzero
Failed figure opens the Session log with the Agent's ID in the search
(the link the Agent page already uses) and the Failed filter, set by an
in-memory intent rather than a new URL parameter.
Update the design context (DESIGN.md, PRODUCT.md) and the protocol
coverage lines these changes made stale: the how-to-call samples on a
project's page with the Session request, the project list's use by
Getting started and the archive confirmation, and api_base_url's uses.
The By Agent Failed figure counts failed Turns, while its link opens the
Agent's failed Sessions. The link's accessible name and tooltip now say
"Open <Agent>'s failed Sessions", and the column's help tip says the
figure counts failed Turns and the link lists failed Sessions.
Open System scrolled the Default model section with scrollIntoView, which
also scrolled the page, whose overflow is hidden, and pushed its header
out of sight. It now uses revealInPageBody, which scrolls only the page
body and can focus another element than the one it reveals. The Getting
started acceptance test checks the header stays in view for steps 2 and 4.
The archive dialog trusted the project read's active_key_count, which is
stale after a key is issued while the project list can't be read again:
it said there were no active keys and archived without the typed name.
It now counts the higher of that and the project's loaded key list, and
Archive waits while the project list is read again; after a failed read
a red line says the count may be out of date and Archive stays disabled.

The name to type shows in mono with its inner spaces kept, and the typed
name matches after trimming, with both sides compared in NFC.
The one-line reason set the status column's minimum width, so the log
scrolled sideways at 1280px. It is now clamped to one line and may break
anywhere, so it only uses width the table has spare, up to 220px. On the
Session page the full reason keeps its line breaks.
Getting started's last step scrolled to the How to call heading as soon
as the project was known, before the keys and usage above it had drawn,
which then pushed the heading out of view. The intent now waits for the
project's keys, its summary and the installation to settle. The
acceptance test gives the project a dozen keys read afresh and checks
that the heading is in view once they have drawn.
The By Agent Failed figure counts failed Turns in the range, but its link
listed Sessions whose latest Turn failed, at any time, so it was often
empty. It now opens the Session log on that project with the log's own
Agent filter and every status. Its accessible name and tooltip give the
count ("3 failed Turns — open <Agent>'s Sessions"), and the column's help
tip says what the figure and the link are.
zh-CN has no plural forms, so the jump read "跳到失败的 Turn(1 个)" for
one failed Turn. The label is chosen in code: the count shows only when
more than one Turn failed.
@SaladDay
SaladDay force-pushed the codex/web-ux-projects branch from cdab2cd to 7017c3f Compare September 26, 2026 06:25
@SaladDay
SaladDay merged commit 26224d0 into main Sep 26, 2026
2 checks passed
@SaladDay
SaladDay deleted the codex/web-ux-projects branch October 7, 2026 06:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant