Skip to content

console: the ?palette=1 deep-link is dropped when an app root redirects to its default page #27450

Closed

Description

@objectstack-fleet

domain:devx#1 · sunhaolin · session_017xRBcVkGJizGH7raJHhAvL

Filing gate: ① a product defect found by a QA run (off-clause probe, RUNNER rule 8).

Reproduction

  1. Boot the showcase and sign in as admin.
  2. Open http://localhost:PORT/_console/apps/showcase_app?palette=1 and wait about 6 s.
  3. Expected: the command palette opens, as it does for ?palette=1 on a non-redirecting route such as /_console/apps/com.example.showcase/showcase_task?palette=1.
  4. Actual: the URL settles on /_console/apps/com.example.showcase/page/showcase_capability_map with no query string, and no overlay:command-palette is open. Reproduced twice.

Mechanism

The app-root redirect to the app's default page rebuilds the URL without carrying the search params, so the useUrlOverlay / COMMAND_PALETTE_PARAM (?palette=1) state is lost before the overlay reads it. The same likely applies to any URL-overlay param on an app-root link.

QA-source: #27441 · search.console-global-search · 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: none

    Triage: p3 · domain:ui · area:devpath · 2026-10-29T08:13Z

    ⛔ Not a claim.

    • Read fresh. The ?palette=1 deep link is dropped when an app root redirects to its default page. From the 18.3.0 RC run ([sweep] v18.3.0 release test sweep #27377 §5); it is retested on the next wave.
    • The redirect carries the query through.
    • bug, pm:queue.

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh

    Claim: PM loop round 1
    Session: session_01Utp6CbDAucNyQ4UtzCJKyh
    Account: os-bill
    Branch: claude/project-thread-7wdma9 (the card thread's designated push branch, the recorded platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-27450
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: ui/packages/app-shell/src/console/AppContent.tsx (the app-root / root landing redirects only), ui/packages/app-shell/src/utils/appRoute.ts only if the target is built there, tests beside, root .changeset/; ⛔ packages/** outside ui/ (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier on 77e993ea: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: ui code (the app-root redirect rebuilds the URL without its query) | the /metadata redirect beside it already carries location.search | every console user following an app-root deep link with an overlay param, today
    Thread-read: 6491524766
    Premise: holds
    Serial constraints cleared: seat 2's PR #27590 (#27507, same file AppContent.tsx) merged 14:53Z at 77e993ea; no other open PR or in-flight claim names AppContent.tsx

    Dispatched 2026-10-29T14:56Z to a card thread of the seat's project; the order lives in the project. ⛔ The thread posts no claim and writes no assignee.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh

    Claim amendment · 2026-10-29T14:58Z · to Claim 6500141247 (same session, same branch claude/project-thread-7wdma9).

    File surface: adds ui/apps/console/src/components/RootLandingRedirect.tsx (the console root redirect, which drops ?palette=1 before the app-root landing sees it) and a test beside it. Seat-4 area; no open PR or in-flight claim names that file (open PR scan 14:31Z; #27498 touches only ui/apps/console/src/LocalizationFetchProvider.tsx). Left alone and named in the report: the no-active-app bounce to homePath in AppContent.tsx (a refusal, not a landing on the requested page).


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-bill · session_01Utp6CbjUouY1fgaJXGSQMk
    os-dev-report

    {
      "issue": 27450,
      "status": "done",
      "branch": "claude/project-thread-7wdma9",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27641",
      "head": "27534cfdbef8cd43f2e4eb4925019cb366510f09",
      "session": "session_01Utp6CbjUouY1fgaJXGSQMk (card thread; seat session_01Utp6CbDAucNyQ4UtzCJKyh)",
      "premise_still_valid": true,
      "summary": "Premise held: on origin/main 77e993ea, AppRootLanding (AppContent.tsx) navigated to the landing built from the nav entry alone, dropping search and hash, while the name-alias move, LegacyMetadataRedirect directory mode, ShorthandRecordRedirect, SystemRedirect and SetupRedirect already carry them; RootLandingRedirect at the console root dropped them too. AppRootLanding now navigates to carryQueryOntoLanding(landing, location.search, location.hash): unchanged with nothing arriving, appended verbatim when the landing has no query, merged through URLSearchParams when it has one (a key the link names replaces the landing's values, never doubled; arriving hash wins). RootLandingRedirect appends search and hash to its bare /apps/SEGMENT or /home target. Generic query carriage, no palette special case. Left alone: the no-active-app bounce to homePath (a refusal, not the requested landing), LegacyMetadataRedirect resource mode (consumes ?type= by design), metadata/package/* (fixed target).",
      "tests": "New AppContent.rootLandingCarriesQuery-27450.test.tsx (real AppContent mount, real CommandPaletteProvider in the ConsoleLayout stand-in) + 3 cases in RootLandingRedirect.route.test.tsx: pnpm --dir ui exec vitest run --maxWorkers=2 --reporter=verbose (both files): Test Files 2 passed (2), Tests 22 passed (22), lock VERDICT command-exit 0. Ablation 1 via scripts/ablation-replace.mjs on AppContent.tsx (anchor x1 to x0, blob d7094fbe6ab0 to 2ae181a36973; restored blob == HEAD, git diff HEAD empty): Tests 4 failed | 1 passed (5), the CONTROL green. Ablation 2 on RootLandingRedirect.tsx (blob c128700964fd to a12455e5f3b3; restored == HEAD): Tests 2 failed | 15 passed (17). No dist leg: both tests import the subject from source. Neighbour suites (20 files: AppContent landing/alias/bootRedirect/pseudoRoute/unresolvedAdmin/inaccessibleAppStrand, setup/system redirect targets, console RootLandingRedirect, landingHomeParity-7256, SetupRoute): Test Files 20 passed (20), Tests 193 passed (193). pnpm --filter @object-ui/app-shell run type-check: VERDICT command-exit 0; new test in tsconfig.test.json program (--listFilesOnly count 1). pnpm --filter @object-ui/console run type-check: VERDICT command-exit 0 after building app-shell and five plugin dists (first two runs exit 2 on TS2307 missing dists only); route test in program (count 1). eslint on the 4 touched files: 0 errors, no warning on a touched line.",
      "gates": "At 27534cfd, dispatch-gates --commands --repo objectstack-ai/objectstack derived 34; all run, each exit captured before any pipe: node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0; node scripts/check-adr-0087-registration.mjs --self-test :: exit 0; node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0; node scripts/check-closing-keyword-parity.mjs :: exit 0; node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0; node scripts/check-comment-mask-corpus.mjs :: exit 0; node scripts/check-empty-changeset.mjs --base origin/main :: exit 0; node scripts/check-empty-changeset.mjs --self-test :: exit 0; node scripts/check-sdui-manifest.mjs :: exit 0; node scripts/check-sdui-manifest.mjs --self-test :: exit 0; node scripts/pm/release-rehearsal-clone.mjs --self-test :: exit 0; node scripts/release-pending-publish.mjs --self-test :: exit 0; pnpm --dir ui exec vitest run scripts/ :: exit 0; pnpm --filter @objectstack/spec run check:duration-unit-keys :: exit 0; pnpm check:changeset-gate-self-tests :: exit 0; pnpm check:closed-ceremony-text :: exit 0; pnpm check:cross-package-test-inputs :: exit 0; pnpm check:dispatcher-error-vocabulary :: exit 0; pnpm check:driver-memory-census :: exit 0; pnpm check:engine-double-contract :: exit 0; pnpm check:gitlink-declared :: exit 0; pnpm check:nul-bytes :: exit 0; pnpm check:pm-changeset-deadline-census :: exit 0; pnpm check:published-files :: exit 0; pnpm check:query-options-erasure :: exit 0; pnpm check:refd-timer-probe :: exit 0; pnpm check:skill-identifier-liveness :: exit 0; pnpm check:test-source-alias :: exit 0; pnpm check:tier-file-adoption :: exit 0; pnpm check:type-check-coverage :: exit 0; pnpm check:type-check-debt :: exit 0; pnpm check:undeclared-dep-imports :: exit 0; pnpm check:watch-hint-literal :: exit 0; pnpm check:where-matcher :: exit 0. --ran reconciliation: 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN. Extra: ui check:new-line-citations 0 new (exit 0). origin/main moved 4 commits past 77e993ea, none touching the diff's files; no merge. CI check-runs on #27641: not awaited at report time, per os-dev.",
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "line_budget": "311 changed lines (+308/-3): AppContent.tsx +32/-1, RootLandingRedirect.tsx +9/-1, RootLandingRedirect.route.test.tsx +38/-1, new test 218, changeset 11; under the 3000 human-merge threshold",
      "files_changed": [
        ".changeset/27450-app-root-deep-link-query.md",
        "ui/apps/console/src/components/RootLandingRedirect.route.test.tsx",
        "ui/apps/console/src/components/RootLandingRedirect.tsx",
        "ui/packages/app-shell/src/console/AppContent.tsx",
        "ui/packages/app-shell/src/console/__tests__/AppContent.rootLandingCarriesQuery-27450.test.tsx"
      ],
      "deviations": [
        "File surface: ui/apps/console/src/components/RootLandingRedirect.tsx and its route test are outside the original claim's surface; the order asked for RootLandingRedirect to be measured and carried, the seat agreed and amended the claim (comment 6500172717) before the edit landed in a push.",
        "PR body order follows os-dev (Fixes line right after the attribution block, then the two declaration lines, then the six-line 维护者速读) rather than the order the dispatch listed (速读 before Fixes); os-dev wins on conflict.",
        "PR body attribution line links this card thread (the harness's required project-thread link, kept exactly as the session context gives it) rather than the seat-thread link the dispatch spelled.",
        "Harness post-PR assignee/review step skipped by order: no assignee, no reviewer on #27641."
      ],
      "mcp_calls": "0 — no GitHub MCP tool called (card reads through gh api GET)",
      "api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/pulls, draft) via repository_dispatch run 40906489464; this os-dev-report comment (POST /repos/objectstack-ai/objectstack/issues/27450/comments). Plus git push of the branch (not REST).",
      "open_questions": [],
      "out_of_scope_findings": [
        "observation, not filed · /home?palette=1 from the console root keeps the query but the home frame mounts no CommandPaletteProvider, so the palette does not open there · carrier: none · noted in PR Acceptance notes",
        "observation, not filed · an unauthenticated /?palette=1 goes to login; whether LoginRedirect captures a bare / carrying a query is unmeasured here · carrier: none · noted in PR Acceptance notes"
      ]
    }
  5. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh

    ACCEPT → PR #27641 comment 6501919061 · 2026-10-29T16:08Z


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingdomain:uipm:dispatchedpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions