Skip to content

Retire app_launcher_page and utility_bar_page: two pages with no UI path, whose page types promise shell roles the console does not give #2118

Closed

Description

@objectstack-fleet

Filing gate ③: a task the maintainer directed, verbatim, in the repo:hotcrm seat's chat (session_01P8mZuzuyZAHSrgQKmv6ASv), answering #2060 item 5's open question "App Launcher and Utility Bar: give a path, retire, or leave?": 「下线(推荐)」.
Reader: the repo:hotcrm seat dispatches it in this act (claim follows). ⛔ Not a claim by itself.
Dedupe: MCP search_issues on hotcrm, "retire App Launcher page Utility Bar page app_launcher_page utility_bar_page" → 0 hits.

Why (measured on #2060 item 5, PR #2117's dev, report comment 6184527028)

The work

Delete both pages and everything that exists only for them:

  • src/sales/pages/app_launcher.page.ts, src/sales/pages/utility_bar.page.ts, and their exports / registrations (src/sales/pages/index.ts and wherever the page list is assembled).
  • pages.app_launcher_page and pages.utility_bar_page in the four locale packs (src/sales/translations/{en,es-ES,ja-JP,zh-CN}/app.ts).
  • The utility_bar_page/quick_notes entry in KNOWN_EMPTY (test/metadata-references.test.ts ~L725-735), and any test that counts pages.
  • Sentences that become false: docs/feature-inventory.md (ADM-003), docs/architecture/module-split-plan.md (~L125), docs/architecture/module-split-inventory.json, the comment in objectstack.composition.ts (~L291).
  • ⛔ Not AGENTS.md (~L104-105 names app_launcher / utility_bar as app-package items): it is a governed path in this repo (Tier H). The dev reports the stale words; the seat carries them to the next governed AGENTS.md change.
  • One changeset for the release-notes reader.

Acceptance

Neither page is in the built artifact or served by /api/v1/meta/page; pnpm verify and CI are green; no doc or test names either page outside CHANGELOG.md; sales_home_page and the record pages are unaffected.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round R87 (#2118; serial dispatch, on the maintainer's ruling 「下线(推荐)」 in this session's chat — the maintainer's word for this priority:p3 card)
    Session: session_01P8mZuzuyZAHSrgQKmv6ASv
    Account: sunhaolin (the seat's linked user as GET /user answers it; always the card's assignee)
    Branch: claude/issue-2118-retire-launcher-utility-bar
    Worktree: hotcrm-issue-2118
    Domain: repo:hotcrm (single-lane repo, no domain:* taxonomy)
    Seat: repo:hotcrm#1
    File surface: src/sales/pages/app_launcher.page.ts and src/sales/pages/utility_bar.page.ts (deleted); src/sales/pages/index.ts and any page-list assembly that names them; pages.app_launcher_page / pages.utility_bar_page in src/sales/translations/{en,es-ES,ja-JP,zh-CN}/app.ts; test/metadata-references.test.ts (KNOWN_EMPTY) and any test that counts pages; docs/feature-inventory.md, docs/architecture/module-split-plan.md, docs/architecture/module-split-inventory.json, the comment in objectstack.composition.ts; one .changeset/2118-*.md. ⛔ Not AGENTS.md (governed, Tier H: report its stale words); ⛔ not sales_home_page or any record page (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: default (dispatch-gates --tier --repo objectstack-ai/hotcrm: "no path-derived mandate"; check-governed-merges --test on the surface: no register hit once AGENTS.md is excluded)
    Clause-②: no
    Responsibility: the app: two shipped pages with no UI path whose page types promise shell roles the console does not give | none | every reader of the exemplar app, human or AI, who copies type 'utility' / 'app' expecting a floating bar or a launcher
    Thread-read: none
    Serial constraints cleared: serial dispatch; nothing else of this seat is in flight since PR #2117 (#2060 item 5) landed (d211930b). src/sales/pages/* and the four locale packs were last changed by #2117 (home.page.ts, sales_home_page keys only); no writer in flight. Closing: the PR says Fixes #2118.


    Generated by Claude Code

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

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 2118,
    "status": "done",
    "branch": "claude/issue-2118-retire-launcher-utility-bar",
    "pr": "#2119",
    "session": "session_01P8mZuzuyZAHSrgQKmv6ASv (subagent run: the dispatching seat’s session)",
    "premise_still_valid": true,
    "summary": "Retired app_launcher_page and utility_bar_page per the ruling 「下线(推荐)」. Deleted both page files and their two exports in src/sales/pages/index.ts. The app package's page list is byExportName({ ...salesPages }) in objectstack.composition.ts, a spread of that barrel, so no other registration existed. Removed pages.app_launcher_page and pages.utility_bar_page from the four locale packs (2 x 9 lines each). Removed the KNOWN_EMPTY exemption from test/metadata-references.test.ts together with its mechanism: the set would be empty and no other test reads it. Updated feature-inventory ADM-003 to '已移除 (#2118)' with anchor '已删除', following the ADM-011 precedent. Updated module-split-plan ~L125 and the composition comment. module-split-inventory.json is hand-maintained per its own $maintenance block, so I removed the 2 files[] rows by hand and logged the edit in $hand_edits (169 rows to 167). The changeset is minor. Hypotheses: H1 held for the name grep, but one count-based consumer is outside it. docs/STATUS.md carries the pasted validate summary '8 Pages', pinned by test/docs-declared-versions.test.ts, which went red, so it now reads 6 (a file-surface deviation). H2 held: in the built artifact the only references were the 2 pages[] entries and 8 translation keys (10 hits before, 0 after). H3 held on the same DB across both boots: 200/200/200 on base, 404/404/200 after.",
    "tests": "Final full run at a15e211 (git rev-parse --short HEAD), under the lock: pnpm test exit 0, 'Test Files 181 passed (181)', 'Tests 3690 passed | 1 skipped (3691)', VERDICT command-exit 0 (held 9m07s). The first full run at 0d51fef was red, exit 1, on test/docs-declared-versions.test.ts: 'Pages: page says 8, the stack registers 6'. That red led to a15e211 (docs/STATUS.md 8 to 6). After the fix, vitest run on docs-declared-versions + metadata-references: 'Test Files 2 passed', 'Tests 55 passed'. Stale-arm probe (pages deleted, test untouched, at the pre-commit tree): exit 1, 'exemptions whose container is no longer empty — delete these lines: utility_bar_page/quick_notes'. One-time reverse verification after commit (trap restore, absolute paths): restoring utility_bar.page.ts and its export over the new test turns 'no page region renders an empty container' red, naming 'utility_bar_page/quick_notes: page:card "Quick Notes" has no body'. Restore was proven by git diff HEAD = 0 bytes, git status 0 lines, and the index.ts hash matching the HEAD blob. Artifact (dist/objectstack.json) before d211930 / after: pages 8 to 6. String walk for app_launcher|utility_bar: 10 hits to 0. All 6 remaining pages are JSON-identical, and the 4 locale packs are identical apart from the 2 removed keys. Build warnings 8 and 8. Dev server :4166, same .objectstack DB on both boots: GET /api/v1/meta/page/{app_launcher_page, utility_bar_page, sales_home_page} answered 200/200/200 on base and 404/404/200 after (RESOURCE_NOT_FOUND). Control no_such_page_2118 answered 404 on both boots. The sales_home_page item is identical before and after. The server was killed by its own PIDs. No ablation beyond that one reverse check: the only tested behaviour changed is the removed exemption.",
    "gates": "Local, all at a15e211, exit captured before any pipe: pnpm validate exit 0 ('✓ Validation passed', 'UI: 1 Apps 14 Views 6 Pages ...'); pnpm typecheck exit 0 (tsc --listFiles includes test/metadata-references.test.ts); pnpm lint exit 0 ('18 suggestion(s)'); pnpm lint:i18n-gate exit 0 ('✓ i18n lint gate: 0 i18n/missing-* issues'); pnpm hygiene exit 0 ('✓ source hygiene clean'); pnpm hygiene:tokens exit 0 ('✓ source token ratchet clean'; all ceilings ruled by #2031, none lowered); pnpm build exit 0 ('✓ Build complete', 6 Pages); pnpm test exit 0 (181/181 files). This is the full pnpm verify chain, hand-derived per the dispatch: hotcrm has no dispatch-gates --ran. PR #2119 check-runs on a15e211 when this was written: Check Changeset success, CodeQL success, Label Pull Request success, Playwright success, Quality Checks success, Vercel Preview Comments success, link-check success, Build and Test (22.x) in_progress, Analyze Code (javascript) in_progress.",
    "line_budget": "+40 / -265 across 14 files. The two deleted page files are -135 of that. Outside them: +40 / -130 = 170 changed lines, against the dispatch's estimate of about 40. Insertions: changeset +22, inventory $hand_edits entry +7, test docstring +7, and 4 one-line swaps (STATUS.md, plan, feature-inventory, composition comment). Deletions: locale packs 4 x 18 = 72 (the card's mandated pages.* blocks; the estimate did not count them), inventory files[] rows 18, test exemption mechanism 34, pages/index.ts 2. No deletion is outside the card's named surface except STATUS.md's one-line swap.",
    "files_changed": [
    ".changeset/2118-retire-launcher-utility-bar.md",
    "docs/STATUS.md",
    "docs/architecture/module-split-inventory.json",
    "docs/architecture/module-split-plan.md",
    "docs/feature-inventory.md",
    "objectstack.composition.ts",
    "src/sales/pages/app_launcher.page.ts (deleted)",
    "src/sales/pages/index.ts",
    "src/sales/pages/utility_bar.page.ts (deleted)",
    "src/sales/translations/en/app.ts",
    "src/sales/translations/es-ES/app.ts",
    "src/sales/translations/ja-JP/app.ts",
    "src/sales/translations/zh-CN/app.ts",
    "test/metadata-references.test.ts"
    ],
    "deviations": [
    "File surface widened by one line: docs/STATUS.md 'UI: ... 8 Pages' to '6 Pages'. test/docs-declared-versions.test.ts pins that figure against the registered stack and went red ('Pages: page says 8, the stack registers 6'). That makes it the card's 'any test that counts pages', and the H1 name grep could not find it. Named in the PR body.",
    "Line budget: 170 changed lines outside the two deleted files, against an estimate of about 40. I did not stop: all of the excess is deletion the card mandates (72 locale-pack lines, 18 inventory rows, 34 lines of the test's exemption mechanism). Insertions total 40, 22 of them the changeset. Breakdown in line_budget.",
    "KNOWN_EMPTY: removed the entry together with its mechanism (the set, the emptyFound tracking, the stale arm and the paragraph explaining them), under the dispatch's 'keep the mechanism only if another test still needs it'. No other test reads it. The rule now runs with no exemptions, and the reverse verification proves it still bites.",
    "Attribution: commit trailers use the model-free pair (Co-authored-by: Claude, Claude-Session URL) and the PR body ends with the session-URL footer. Both follow the os-dev definition, which takes precedence over the harness reminder's model-named trailer and its other footer form.",
    "Shared checkout /home/user/hotcrm was never edited. It sits on branch claude/gifted-ramanujan-ecqwgz at 2f3d898, which is not this run's. Noted only."
    ],
    "mcp_calls": "0",
    "api_writes": "2 — (1) POST /repos/objectstack-ai/objectstack/dispatches (fleet-write relay request fw-20261015T065105Z-588076, run 38694922902 success) carrying pr_create, which became POST /repos/objectstack-ai/hotcrm/pulls, PR #2119, draft, assignee sunhaolin; read-back 6721 bytes sent and stored, identical. (2) POST /repos//issues/2118/comments, this os-dev-report via post-stamped.mjs. label-write: 0. git push x3 (empty-branch probe, 0d51fef, a15e211), which are not REST writes.",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: AGENTS.md (governed) · noted, not filed. AGENTS.md L104-105 (Three rules, rule 3) still reads: 'Items with no single object (the app, home / app_launcher / utility_bar, the cross-domain dashboards and skills, every permission set, the positions, the locale packs) are the app package's.' The words '/ app_launcher / utility_bar' are stale once #2118 lands; home alone remains. Tier H, not edited here.",
    "carrier: none (承接者:无) · noted, not filed. test/metadata-references.test.ts ~L359 comment: 'every one of the 18 component types these pages author has an id, and none of the 8 action-shaped types does'. It was already off on base: an artifact walk finds 19 id-carrying types and 0 action-shaped, and 16 after this PR. Its conclusion still holds. In the PR's Acceptance notes.",
    "carrier: none (承接者:无) · noted, not filed. docs/STATUS.md's pasted validate summary lacks '5 Picklists' on the Data line, which pnpm validate prints. The pin test does not read that line. In the PR's Acceptance notes.",
    "carrier: none (承接者:无) · noted, not filed. The removed KNOWN_EMPTY entry named hotcrm#1215 as its owner card, and REST GET /repos//issues/1215 answers 404 today (evidence destroyed or never visible, NOT MEASURED which). In the PR's Acceptance notes."
    ]
    }

  4. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #2119 comment 6186446446 · 2026-10-15T07:01Z

  5. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    落地 · 2026-10-15T07:03Z

    读数 探针 结果
    队列分支 git ls-remote origin 'refs/heads/gh-readonly-queue/*' 空(已出队;merged 2026-10-15T07:03Z)
    origin/main git merge-base --is-ancestor 63db83e2 origin/main 是;origin/main = 63db83e2 feat(pages)!: retire the App Launcher and Utility Bar pages, which had no way in and promised shell roles the console does not give (#2119),父提交 d211930b

    状态变更:Fixes #2118 已代关(completed);摘 pm:dispatched、unassign,收口。遗留:AGENTS.md L104-105 仍写着 app_launcher / utility_bar(受管路径),由席位带到下一次受管 AGENTS.md 改动。

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions