Skip to content

Two launch-wizard steps ask nothing useful: 「首个版本」 is an empty page for a type with no template, and 「提交合同」 is a lone checkbox whose button says 提交 either way #162

Closed

Description

@objectstack-fleet

Filing class: ① user-visible defect (two items on one wizard) — reach: public door, measured in a browser on main (18.1.0, pnpm demo:zh), code read on main 21f2319. Reader: the hotclm lane.

Symptom

  1. 「首个版本」 step, NDA (no template). Seven smaller things a real user hits — items 2, 3, 4: template toggle only with a template, a Renewals list, Withdraw for the owner's draft #123 (from Seven smaller things a real user hits (from the 17.7.0 browser pass): legal tabs shown to requesters, a template toggle with no template, renewal with no link, orphan drafts, a false demo note, an empty landing page for lawyers #99 item 2) hid the "Draft from template" toggle on a type without a template. What is left is a page with a title, one sentence and the 提交 button (src/flows/contract-intake.flow.ts:336-350). The user clicks through an empty step. The demo seeds no template_file on any type (src/data/catalog.seed.ts:24), so in the demo every launch shows this empty step.
  2. 「提交合同」 step. One field, 立即提交, a boolean that starts unticked (:442-447), and the button reads 提交 whether it is ticked or not. Unticked + 提交 keeps a draft; ticked + 提交 sends it to legal. A requester who leaves it unticked and presses 提交 has every reason to think the contract went out.

Fix

  1. Route around screen_document when the type has no template: decision_document_screen (:334, edges e29 / e30) already branches; add the templateAvailable test so an interactive run without a template goes straight to create_contract.
  2. Make the choice explicit: a required select 「提交方式」 with two options, 「现在提交给法务 / 审批」 and 「先保存为草稿」, and no default. Then the footer button's wording no longer decides the meaning. The platform side, a button that reads 下一步 / a declared label, is filed separately on objectstack.

Dedupe: hotclm issues (all states) grepped for screen_document, submit_now, 立即提交, empty step — #99 item 2 / #123 (the toggle, done); none covers the empty page or the submit choice.


Filed from the hotclm UI/UX review (2026-10-27).

Activity

  1. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Platform half of item 2 (every non-final screen button reads 提交, a toast after each step): objectstack-ai/objectstack#26578. Date / boolean widgets on the same wizard: objectstack-ai/objectstack#26579.

  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage — 2026-10-27

    User-visible defect, read against main: accepted.

    Route: app-side, two items on the launch wizard. (1) Skip the empty 「首个版本」 step when the type has no template. (2) Make the submit choice explicit. It shares contract-intake.flow.ts with #156 and #161, so it is serialized after #156. The 「提交方式」 wording is reviewed on the PR.

    State: → pm:queue + bug.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 17
    Ruling-ref: none (triaged defect, comment 6439182325)
    Session: session_017nzWFRUo2U7evMkPdVniAn
    Account: zhuangjianguo (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-99-launch-wizard
    Worktree: hotclm-issue-99
    Domain: repo:hotclm (single-lane sister repo — no domain:*)
    Seat: repo:hotclm#1
    File surface: src/flows/contract-intake.flow.ts (F1 launch wizard) · src/actions/contract-lifecycle.actions.ts (start_renewal navigation only) · src/actions/contract.actions.ts (the launch action, only if the wizard's inputs change) · flow and action translations; stop on breach; explain in the report
    Container & model: S, mode:subagent, model: opus (TIER_DEFAULT; hand-derived for a sister repo), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: this app's launch wizard and renewal hand-off (what a requester is asked, and where they land) | objectstack-ai/objectstack#25800 and #25801 shipped in 18.2.0 | every requester who launches or renews a contract
    Thread-read: 6439182325
    Premise: re-measured by the dev on origin/main 475106f (@objectstack 18.2.0) with the declared demo staff
    Serial constraints cleared: #156 landed (PR #170, flows) and #169 landed (PR #173, lifecycle actions). In flight: #43 (executed-upload, backfill action), #160 (notify nodes in other flows), #41 (data); all on disjoint files. Bundled with #99 items 3–4 and #161 on contract-intake.flow.ts, one dev and one PR.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling-ref: none (triaged defect)

    Landed — PR #180 · 2026-10-27

    reading value
    PR #180 MERGED (squash on main), merged at its ACCEPT head bdabe1e; Fixes #162 closes this card
    authority maintainer, project thread, verbatim: 「你可以自己审核的就自己合并」

    Release: the 首个版本 step always asks for something, and 「提交方式」 must be chosen, so nobody saves a draft by not ticking a box. State: pm:dispatched removed, assignee cleared.


    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

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions