Repository navigation
fix(app): block new sessions when no models are available - #399
Conversation
commit: |
|
React Doctor found no new issues. 🎉 Reviewed by React Doctor for commit |
|
auto-merge: no head out of
not lint-format, not presentation-only UI. fail closed — no merge. |
|
auto-merge: no head out of
not lint-format, not presentation-only UI. fail closed — no merge. |
aa14c3a to
e0eb997
Compare
Review-and-merge gate record — not merged
Required CI observed for this head
Blocking gate and conclusion
Stopped before code review and independent verification; not merged. These are gate observations, not an implementation-quality verdict. No branch update, conflict resolution, CI rerun, protection bypass or fix-and-merge was performed. Revisit only after a relevant change resolves the recorded blocker: an author-provided head containing current |
CI 失败定位与修复方向
这是对既有阻塞新增的日志定位,不是代码审查通过。未本地重现或验证修复方案,未修改分支、重跑 CI 或合并。修复/环境恢复并得到满足当前 base 的全绿候选后,重新从 CI → 审查 → 独立验收开始。 |
Queue update after verified #423 merge — waiting at CIHead Required CI for this new head is queued/in progress at this observation, so no old-head review or acceptance is carried forward. New-head full review and affected independent runtime verification remain outstanding. No merge or deferred auto-merge. Continue only after the applicable blocker is resolved and the new version passes required CI → review → independent acceptance. |
|
Merged The only content conflict was Checks: app browser tests 8/8 ( |
|
Blocker (CI gate) for head |
|
The app-e2e failures were the no-models gate, not a missing textbox.
Checks: |
Review — #399 head
|
|
Addressed the blocking review on
A Pushed as a normal commit. PR not merged. |
Verification record — #399 head
|
| Surface | Code tested |
|---|---|
| Web, before | main db2acfae |
| Web, after | this PR's head |
| Desktop, after | this PR's head |
This confirms the gate does not regress the configured path.
The empty-catalog gate itself is covered by the browser test above, as the recipe asks. pie-verify refuses an empty PI_CODING_AGENT_DIR by design.
Open decision before merge
- When the daemon catalog is empty, the fallback starts
pie-pi-process --approvewith the selected project'scwd. That runs global and project extensions while the draft is still only listing models, before anything is sent. - The existing test
listAvailablePiModels › does not execute Project extensions while reading the model listencodes the opposite intent for the daemon path. - This overlaps the model-listing direction in fix(server): restore user Pi extension and plugin loading #427, so the intended trust behavior is with the Developer.
- Merge waits for that decision. A change to the fallback's
cwdor flags warrants re-review.
|
Recordings for the verification record above (#399 (comment)): draft composer → send → reply on head 399-web-after-send.webm399-desktop-after-send.webm |
|
Developer decision (2026-10-06): the model list comes from a short-lived Pi process, as in t3code and paseo.
|
|
Developer decision applied: The listing child does not pass Draft, the session model picker, and the schedule form still call PR not merged. |
|
Single-flight and a 60s server cache are now in front of the model-list child, keyed by the resolved cwd. Concurrent calls share one child. A success is reused until the TTL; a timeout or failure is not stored. Draft Retry calls Draft, the session model picker, and the schedule form share one React Query key per project ( Commands stay a separate spawn. Measured on this machine, empty agent dir: cold PR not merged. |
|
Developer decision update (supersedes the cache request above): no server-side cache or single-flight for |
|
Developer decision (2026-10-06, supersedes the earlier no- |
|
Two Check failures on
Cold |
|
Dropped the server catalog cache and single-flight. React Query already dedupes the same key, and the app
The two Check failures stay fixed: a direct PR not merged. |
|
Imported Project = approved. The transient model probe now passes The untrusted-extension expectation is gone. Listing an imported Project includes that Project's extension provider models. The hang/timeout test stays. No server cache, single-flight, or PR not merged. |
Review — #399 head
|
|
Addressed the review on
Not merged. |
Review — #399 head
|
|
Correction to #399 (comment): main's next push run ( |
|
Addressed the blocker on
Did not touch the app-e2e archive failure. Not merged. |
|
Typecheck fix on the missing-entry test, and merged
Not merged. |
|
Rebased onto current main ( The Check failure was not a product regression. After the titlebar started showing the session title, Replaying the old PR commits conflicted on the first commit, so the net change is one commit on top of main. The archive assertion is unchanged from #459. Local evidence:
Not merged. |
|
auto-merge: no head Exclusion hits even once conflicts are resolved:
Also note main just landed #461 (list models through a short-lived pie-pi-process), which likely overlaps |
|
Rebased onto main ( #461 already lists models through a short-lived pie-pi-process ( Local evidence:
Not merged. |
|
auto-merge: no head Fails closed on exclusions (no allowed group covers these hunks):
Looks like a reasonable fix, but it needs a human merge. |
Independent review + verification: PR #399
CIAll required checks passed on this head: Check, react-doctor, and both Publish @getpie/cli preview checks. Mergeable state: clean. ReviewThe diff matches the description. The other changes are scoped as described:
The new browser test (the remote Environment has an empty catalog, the local one has models) fails against base Independent verificationClean worktree pinned to the head:
Runtime used
Non-blocking notes
Gaps
Re-review is needed if the head changes, or if main's recording-001.webmrecording-002.webmrecording-003.webmrecording-004.webmrecording-005.webm |
Rebased onto main. The archive row-menu e2e now right-clicks the sidebar title, not the titlebar text that stole the first exact match.
Supplementary verification: PR #399 on Desktop, and combined with #463
CIAll required checks pass on Setup
Observed (Desktop / Electron)
Note on the elapsed time (non-blocking): the error appears after about 127s, not about 30s. Each attempt is bounded at 30s by #463, but the draft's Gaps
Re-review is needed if the head changes, or if main's Videos: desktop-no-models-then-models.webmdesktop-stalled-discovery-timeout.webm |
|
Merged head |























What changed
Verification
Scope
This prevents starting from /draft. Existing-session prompts, direct RPC callers, and scheduled runs are unchanged.
UI evidence
Before/after screenshots and recordings captured locally; attaching below.