Skip to content

An app cannot give each audience its own landing page #28022

Closed

Description

@objectstack-fleet

domain:spec#2 · os-tesla · session_01L9qibx5r5nhDMwpRs4SL6D

Ruled: 6545223246 · letter A · 2026-10-31T15:14Z

domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe

Filing gate: ③ triage-directed. The order on #27386 said: take what is ui-only, card the rest. The card thread measured each row on origin/main (report 6518223407, out_of_scope_findings). Rows 2 and 4 are taken in PR #28017.
Reach: any app shared by more than one audience. In HotCRM, moving Sales above Service moves service staff's landing to Leads (#27386 row 5).
Reader who acts: domain:spec first (the app or manifest key), then domain:ui (the console landing redirect).
Duplicate search: search_issues "app landing page per audience persona visible predicate navigationContributions position" → #23610 (closed, PageTypeSchema wording), not this.

Observed

An app's landing is its first shown navigation entry. homePageId is retired, and manifest navigationContributions only append.

Wanted

  • Spec: either a new app key (for example a landing list with visible predicates, first match wins), or contributions that declare a position. Landing: packages/spec ui/app.zod.ts, or the kernel manifest.zod.ts navigationContributions.
  • Console: the landing redirect reads it.

Dedupe words: landing per persona, app landing visible predicate, navigationContributions position.

Related: #27386 (row 5).


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#2 · os-tesla · session_01L9qibx5r5nhDMwpRs4SL6D

    Ruling: batch 2026-10-31 item 3 · letter A · maintainer 「同意」 2026-10-31T15:12Z

    The maintainer answered the consolidated decision list of 2026-10-31 (items 1–9, every item as recommended) with 「同意」 at 2026-10-31T15:10Z, in the project's decisions thread. Item 3 is this card.

    • A (ruled): the app gains a landing list key; each entry carries a visible predicate, and the first entry whose predicate holds is the landing.
    • B (not taken): reuse navigationContributions with a declared position, no new key.

    Work for A: one new spec key on ui/app.zod.ts with the usual spec-to-ui ripple (liveness row, lint of the predicate, docs), then the console landing redirect reads it. Order: spec first (this card, seat 2), then a domain:ui card for the redirect.

  2. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 31, 2026
  3. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#2 · os-tesla · session_01L9qibx5r5nhDMwpRs4SL6D

    Claim: PM loop round 5
    Session: session_01L9qibx5r5nhDMwpRs4SL6D
    Account: os-tesla
    Branch: claude/project-thread-9ddkwd (the card thread's designated push branch, the recorded platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-28022
    Domain: domain:spec
    Seat: domain:spec#2
    File surface: packages/spec/src/ui/app.zod.ts + tests, packages/spec/liveness/* app row, the lint expression check for the new slot, docs pages listing app keys, the tables the gates force, a @objectstack/spec changeset. ⛔ no ui/**, no docs/adr/**, no governed path (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: TIER_DEFAULT, effort: high; landing: seat after the lane contract review (not governed unless an ADR amendment is forced; then Tier H, stop and report)
    Clause-②: yes (widening: one optional app key, a landing list with visible predicates)
    Metadata-protocol: added
    Responsibility: n/a — not a defect card
    Thread-read: 6545223246
    Premise: holds (re-read at origin/main 5da3a8ce; the gap named on the card is still there)
    Serial constraints cleared: none (no open PR touches ui/app.zod.ts app keys at claim time)
    Ruling-ref: maintainer 「同意」 (2026-10-31T15:10Z), ruling 6545223246, letter A; dispatch authority = the maintainer's 「p3 也可以开发」 (2026-10-30T12:41Z) and 「每个座位并发可以5」 (2026-10-30T15:04Z); order: /mnt/project-files/spec-seat-2/r2026-10-30/dispatch-28022.md

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

  4. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#2 · os-tesla · session_01L9qibx5r5nhDMwpRs4SL6D

    Amends claim 6545300407 · 2026-10-31T15:38Z

    File surface: + one test-only line in ui/packages/types/src/__tests__/spec-object-refinements-7715.test.ts: the "SpecAppFields → AppComponentSchema" row gains notAttachable: ['appLandingItemsResolve'], owed to the follow-up domain:ui landing card. Forced by the census gate (Test UI, a required context): the new AppSchema object-level refusal of a dangling landing[].item is not attached to objectui's AppComponentSchema in this PR. ⛔ Still no ui/** source edit; attaching the refinement rides the ui card.

  5. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#2 · os-tesla · session_01L9qibwXXtueDQZXqxv2FsL

    os-dev-report

    {
      "issue": 28022,
      "status": "pr_open",
      "branch": "claude/project-thread-9ddkwd",
      "pr": 28449,
      "head": "1308512cc0d6e8f9d4f4358f541f94ac028b0f74",
      "session": "session_01L9qibwXXtueDQZXqxv2FsL",
      "premise_still_valid": true,
      "summary": "Spec half of ruling A: AppSchema.landing [{ item, visible }], first match wins, no match opens the first navigation item by order. checkAppLandingItems (superRefine, exported) refuses at parse an item naming no entry of navigation or areas[].navigation, an item naming a group/separator/action, and a visible reading data. Lint judges each landing predicate at os validate/os build. Liveness row planned + authorWarn; docs section; changeset spec+lint minor.",
      "tests": "spec app-landing.test.ts 14 new; lint validate-expressions landing case + read-surface rows; ablations: superRefine mount removed -> 5 failed, lint check removed -> 2 failed",
      "gates": "dispatch-gates --ran: 108 derived, 108 run, 0 NOT-MEASURED (5 lines rerun after fetching the teardown pinned sha and a full dts build). After merging main: generated ui artifacts regenerated, check:generated + targeted spec/lint/metadata-protocol/ui census/dogfood tests exit 0 at 1308512c.",
      "dogfood_battery": "n/a",
      "mcp_calls": {
        "writes": 0,
        "reads": [
          "issue_read get",
          "issue_read get_comments"
        ]
      },
      "api_writes": [
        "fleet-write pr_create #28449 (run 41221928886)"
      ],
      "open_questions": [],
      "follow_up_owed": "domain:ui landing card: console landing redirect, liveness landing -> live, attach checkAppLandingItems to objectui AppComponentSchema and drop the notAttachable line in ui/packages/types/src/__tests__/spec-object-refinements-7715.test.ts, re-classify dogfood row cel-app-landing. PR body line awaits the seat's card number.",
      "out_of_scope_findings": [
        "validateStackExpressions does not list app in its runtimeTypes, so a landing predicate's CEL syntax is judged only at os validate/os build, not at the app save door (parse refusals do run there).",
        "No root verdict on the landing predicate: reading record.x passes lint; the console card decides the evaluation scope."
      ]
    }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:specDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions