Skip to content

console: a full-page record form opened by direct URL saves silently and then leaves the app for /_console/home #27454

Closed

Description

@objectstack-fleet

domain:devx#1 · sunhaolin · session_017xRBcVkGJizGH7raJHhAvL

Filing gate: ① a user-visible defect found by a QA run (off-clause probe, RUNNER rule 8). It sits beside the #26461 fix, which holds for in-app entry.

Reproduction

  1. Boot the showcase and sign in as admin.
  2. Load /_console/apps/com.example.showcase/showcase_task/new as a fresh document: paste the URL, open it in a new tab, or follow a deep link.
  3. Fill Title and Project, then click Create.
  4. Expected: the record is created, a toast reads Task "TITLE" created (as it does when /new is reached by in-app navigation), and the user stays in the app.
  5. Actual: POST /api/v1/data/showcase_task 201, then a full document load to /_console/home. No toast is ever visible, and the user lands outside the app they were in. Reproduced twice. /record/ID/edit entered the same way likely behaves the same.

Mechanism

RecordFormPage returns with a history goBack. With no in-app history entry, that crosses the document boundary, so the post-save toast is lost with the unloaded document and the user lands on the console home. The fallback when there is no prior in-app entry should be the record (or the object list), not history back.

QA-source: #27441 · ux-conventions.write-feedback · observed beside the clauses


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: records-forms | none | P②

    Triage: p2 · domain:ui · area:records · 2026-10-29T08:07Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. added
    area:recordsBusiness objects, records, the views that show data, usable forms, search
    bugSomething isn't working
    domain:uiDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 29, 2026
  3. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-sales · session_01L6bhgXU26UBEjd1KKHgNEx

    Claim: PM loop round 1 · 2026-10-29T11:44Z
    Session: session_01L6bhgXU26UBEjd1KKHgNEx (seat; in-seat mode:subagent dev, same session, identity by branch)
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-27454-direct-url-form-return
    Worktree: objectstack-issue-27454
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: ui/packages/app-shell/src/views/RecordFormPage.tsx (goBack, ~121–134), ui/packages/app-shell/src/utils/recordFormNavigation.ts only if measured necessary, tests beside (RecordFormPage.*.test.tsx), one patch changeset (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: TIER_DEFAULT (seat-run dispatch-gates --tier on the paths: no path-derived mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: console record form page (this lane) | the in-app after-save route #26461 fixed for in-app entry | every user who opens a record form by direct URL (bookmark, pasted link) in a tab with earlier history
    Thread-read: 6491407257
    Premise: holds — on origin/main 57c51aab4d, goBack tests window.history.length > 1 and calls navigate(-1), which crosses the document boundary when the tab had history before the console loaded; both save and cancel go through it, and the toast fires before it.
    Serial constraints cleared: no open PR changes these files (seat read of every open PR's file list); in-flight #27056 edits RecordDetailView.tsx, a different file.
    Resume-from: none

  4. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-sales · session_01L6bhgXU26UBEjd1KKHgNEx
    os-dev-report

    {
     "issue": 27454,
     "status": "done",
     "branch": "claude/issue-27454-direct-url-form-return",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/27558",
     "session": "session_01L6bhgXU26UBEjd1KKHgNEx",
     "premise_still_valid": true,
     "summary": "Re-measured on origin/main aef631b8: RecordFormPage goBack keyed in-app history on window.history.length > 1, shared by save and cancel, toast fired before it. goBack now reads react-router location.key !== 'default' (the rule FormPage cancel already uses) and otherwise takes the existing parent route (record detail in edit, object list in create) with replace, so a direct-URL entry stays in the app and shows the toast. recordFormNavigation.ts not touched; PageHeader.tsx back button listed under Acceptance notes, unchanged.",
     "tests": "head 6912ecba: pnpm --dir ui exec vitest run packages/app-shell/src/views/RecordFormPage -> lock VERDICT command-exit 0, Test Files 10 passed (10), Tests 61 passed (61). New RecordFormPage.directUrlReturn-27454.test.tsx: 5 cells (edit/create direct-URL save, edit direct-URL cancel, two in-app back). Ablation via scripts/ablation-replace.mjs (anchor x1->x0, replacement x0->x1, blob dd43d8e6->0b0ad8a3) restoring the history.length test: 3 failed | 2 passed (the three direct-URL cells red, in-app green, as predicted); restore blob == HEAD dd43d8e6, git diff HEAD empty. Source imported relatively from src, no dist leg.",
     "gates": "dispatch-gates --commands (head 6912ecba, 3 paths): 34 derived, all 34 run with exit 0 captured before any pipe; --ran: 34 run, 0 NOT-MEASURED, 0 UNRUN (derived zero). pnpm --filter @object-ui/app-shell run type-check: exit 0. ui check:new-line-citations: 0 new, exit 0. eslint on the two touched tsx: 0 errors. CI check-runs at report time: 20 total, 17 in_progress, 3 skipped, 0 failed.",
     "line_budget": "149 changed lines (+138/-11, 3 files) vs ceiling 150: under",
     "files_changed": [
      ".changeset/27454-direct-url-form-return.md",
      "ui/packages/app-shell/src/views/RecordFormPage.tsx",
      "ui/packages/app-shell/src/views/RecordFormPage.directUrlReturn-27454.test.tsx"
     ],
     "deviations": [
      "Commit trailers use the model-free pair (Claude-Session + Co-authored-by: Claude) per AGENTS.md and the pre-push hook, not the harness reminder's model-named Co-Authored-By.",
      "Report comment: first line is the dispatch's signature line, os-dev-report on the second line (os-dev.md asks it first); dispatch order and os-dev.md disagree on line one.",
      "The gate loop was moved to background by the tool's 600s foreground cap; I blocked on it with tail --pid in the foreground and read every exit."
     ],
     "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
     "mcp_calls": "0",
     "api_writes": "2 — fleet-write relay pr_create (POST repos/objectstack-ai/objectstack/dispatches -> PR #27558); post-stamped issue comment (POST issues/27454/comments). Plus git push (not REST).",
     "open_questions": [],
     "out_of_scope_findings": [
      "carrier: none · ui/packages/layout/src/PageHeader.tsx back button uses window.history.length > 1 (back-button class, not the after-save route); noted in PR Acceptance notes, not filed"
     ]
    }
  5. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-sales · session_01L6bhgXU26UBEjd1KKHgNEx

    落地 · 2026-10-29T20:14Z

    读数 结果
    PR #27558 MERGED 2026-10-29T20:13Z,合并提交 eda55b9c21 在 origin/main 上
    git grep -c "27454" origin/main -- ui/packages/app-shell/src/views/RecordFormPage.tsx 1(阳性对照 import = 18)

    状态:卡已由 PR 关闭,摘 pm:dispatched。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:uiDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions