You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Make the public web forms read as guest-facing, and cap a guest's case priority at High: priority options and hotline hint, guest field labels, no pre-filled zero, case number on thank-you #2368
Ruled: Irene · 2026-10-29T02:08Z · the UX plan of the #2320 browser pass: six HotCRM cards plus objectstack suggestion cards, queued (4+5) → 6 → 10 → 9 → 7 → (8+3). This is card 4 of 6, themes 9 (public web forms), with the web-to-case thank-you from theme 4.
Source
The #2320 browser pass on platform 18.2.0 (six tracks, 115 UI suggestions). Filing gate ③ a task the maintainer directed. Each row cites its track report on #2320 and the suggestion id there; the steps and screenshots are in that track's REPORT.md (project files qa-2320/<track>/). The platform parts of the same themes are objectstack#27355 (console) and objectstack#27356 (Setup and Studio).
Measure each row first on origin/main. A row that is already fixed, or that turns out to need the platform, is not forced: report it with the evidence and move on.
Ruling on guest priority (Irene, not to be re-decided)
A guest on the web-to-case form may pick at most High. Today a guest can pick Critical, which escalates at once and notifies the service manager (CASE-00041).
Measure first: can an 18.2.0 public form restrict a select's options for that form alone?
If it can, offer Low, Medium and High.
If it cannot, drop the priority field from the public form, and the case takes its default. Report the missing per-form option filter as a platform finding (the seat files it).
Either way, the anonymous submit door must not create a Critical case. A crafted POST with Critical must be refused or capped at High. Measure the door and test it.
Add the hint 「紧急故障请拨打服务热线」 to the form (en: "For an urgent outage, call the service hotline.").
Copy and defaults
#
Observed on 18.2.0
Report
Target
1
Web-to-case fields read "Supplied Name" and "Supplied Email".
The confirmation names the case number, if 18.2.0 forms can template it; otherwise a platform finding.
Not here: branding, button colour and field highlighting on refusal (objectstack#27355 rows 9–10).
Done when
Each row is fixed, or reported as already fixed or platform-only, with the measurement.
A behaviour change (hook, flow, action visibility, refusal) has a test that goes red with it reverted. A metadata-only change (layout, order, label) is checked by the existing metadata and docs guards.
The in-app manual pages that describe a changed surface say what it does now, in en and zh. The Service Manual states the guest priority cap and the hotline hint.
pnpm verify is green, and the PR includes a changeset.
Grade: priority:p3. The only HotCRM page that customers and prospects see; the priority cap closes an escalation a guest can trigger. Size: S. The implementer may split the card into two PRs along the table's sections.
Filed by the repo:hotcrm lane seat (session session_01J8VVAnPkgK6CWrJa6t7Fk5) from Irene's ruling on the #2320 UX summary. Dedupe: read the 20 open hotcrm issues. None covers these rows; overlaps are named in the rows.
This order takes the slot freed by #2371 (PR #2376). It is UX card 4 in Irene's queue order: #2371 → #2366 → #2367 → #2368 → #2369 → #2370. The card body is the spec, and its guest-priority ruling is Irene's and final. #2367 holds the other slot.
Container & model: M · mode:thread · model TIER_DEFAULT · effort high (the thread runs at the project default). Role file:objectstack-ai/objectstack.claude/agents/os-dev.md. Read it in full. hotcrm AGENTS.md binds. Re-measure on origin/main (495bff5 or later). Writes:
The PR goes only through the relay op pr_create: draft, base main, assignees: [huangyiirene].
Comments go only through scripts/pm/post-stamped.mjs.
⛔ No GitHub MCP write. ⛔ No issue filing: platform findings go in the report, and the seat files them.
The write budget is tight, so make two writes: the PR and the report.
Report: the os-dev-report JSON, posted as a comment on this card and sent as the final message to the seat thread. ⛔ Start editing only after the newest Claim: on this card names your branch. Push work in progress at each milestone, so a stop loses nothing.
Scope notes
Guest priority, in this order:
Measure whether an 18.2.0 public form can restrict a select's options for that form alone. State the probe and its answer in the PR.
Measure the anonymous submit door (POST /api/v1/forms/<web-to-case>/submit) with priority: critical. Today it answers 201 and escalates (CASE-00041).
Whatever the form shows, that door must not create a Critical case. Refuse it, or cap it at High; say which you chose and why. Test it.
Add the hotline hint 「紧急故障请拨打服务热线」 (en: "For an urgent outage, call the service hotline.") where the form shows help text.
Escalation: if a guest's case is capped at High, check that the escalation and notification paths for Critical are not fired by anything else on that insert.
Claim: PM loop round 1
Session: session_01J8VVAnPkgK6CWrJa6t7Fk5
Account: huangyiirene
Branch: claude/project-thread-45r09q
Worktree: hotcrm-issue-2368 (card thread; branch is platform-designated, the measured platform exception to claude/issue-N-slug; implementing session session_01J8VVAmA6c9KrsMQiv9s7ak)
Domain: repo:hotcrm (single-lane repo, no domain:*)
Seat: repo:hotcrm#1
File surface: the web-to-case and contact-us public form metadata, the case hook path that receives the anonymous submit (guest priority cap), case/lead labels and help text shown on the forms (+ translation entries, no file moves), test/ for the forms and the cap, the Service Manual and web-form docs pages (en + zh, site en/zh-Hans/zh-Hant), one changeset; ⛔ permission sets, positions, sharing (stop on breach; explain in the report)
Container & model: M, mode:thread, model: TIER_DEFAULT (sister repo, hand-derived), effort: the order asked high; the thread runs at the project default, which only the maintainer sets
Clause-②: no
Metadata-protocol: none
Responsibility: #2368 UX card 4: guest priority max High (form + submit door, measured first), hotline hint, guest-facing copy, no pre-filled zero, case number on thank-you
Thread-read: 6487867778
Premise: holds — re-read at claim on hotcrm origin/main495bff5 (order comment 6487867778)
Serial constraints cleared: none known — #2367 edits navigation and views
{
"issue": 2368,
"status": "done",
"branch": "claude/project-thread-45r09q",
"pr": "https://github.com/objectstack-ai/hotcrm/pull/2378",
"session": "session_01J8VVAmA6c9KrsMQiv9s7ak",
"premise_still_valid": true,
"summary": "Measured on 495bff5 (18.2.0): a public form cannot restrict a select's options per form (a form-row options subset is served by GET /forms/support but /_console/f/support still lists all four), and POST /forms/support/submit with priority critical answered 201 and stored an escalated critical case. Per the ruling's fallback, priority is off web_to_case (the door drops it, the case takes low), and the guest branch of case_sla_defaults caps a guest critical at high (capped, not refused: the case is real and the hotline hint covers a P1). Hotline hint as the section description, guest labels Your name / Your email in en, zh-CN, es-ES, ja-JP; Service Manual (en/zh) and the Cases site page (en/zh-Hans/zh-Hant) updated. Rows 2 (currency placeholder 0.00) and 3 (case number on thank-you) are platform-only, no change.",
"tests": "pnpm verify at 486d3f5: validate, typecheck, lint, hygiene, hygiene:tokens, build green; vitest Test Files 252 passed (252), Tests 4823 passed | 1 skipped; VERIFY_EXIT=0. New test/web-to-case-guest-priority.test.ts (5); updated case-sla-matrix, flow-escalation-ownerless-case (new systemInsert helper), case-create-form-narrowing, case-guest-branch-leftovers (comments). Ablations, exact-anchor replace, restored with git checkout HEAD, git diff HEAD empty after: A1 cap line removed -> web-to-case-guest-priority + case-sla-matrix 2 failed | 39 passed; A2 priority back on web_to_case -> web-to-case-guest-priority 2 failed | 3 passed.",
"gates": "local: pnpm verify exit 0 at 486d3f5 (the repo's whole chain; hotcrm has no dispatch-gates derivation). CI on PR #2378 at open: Label Pull Request success, Vercel Preview Comments success; Build and Test (22.x), Check Changeset, Playwright, Typecheck and Build, link-check, Quality Checks, Analyze Code in_progress.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "6 — github issue_read x3, pull_request_read x2 (PR #2376 body as template, #2378 check runs); claude-code-remote subscribe_pr_activity x1. No GitHub MCP write.",
"api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/hotcrm/pulls draft + POST issues/2378/assignees), this os-dev-report comment via post-stamped.mjs. Plus git push of the branch (not REST).",
"open_questions": [],
"out_of_scope_findings": [
"class: a · reach: /_console/f/support renders all four crm_case.priority options when the web_to_case row declares options [low, medium, high] (screenshot probe-form-option-subset-ignored-en.png in project files issue-2368), and POST /api/v1/forms/support/submit accepts a value outside the row subset (registerFormEndpoints checks keys and required only) · 18.2.0 has no per-form option filter · dedupe words: public form option subset, form field options ignored, anonymous form select options",
"class: a · reach: /_console/f/contact-us Annual Revenue shows placeholder 0.00 on an empty optional currency field, reading as filled in (console ui-components CurrencyField placeholder fallback 0.00) · dedupe words: currency placeholder 0.00, empty currency field",
"class: a · reach: /_console/f/support after submit shows Thank you! with no case number: the submit answer is the id only, thank-you title/message have no interpolation, and submitBehavior is not translated · dedupe words: thank-you message record number, submitBehavior translation, public form confirmation",
"carrier: Irene · noted, not filed: a web case now arrives at Low; whether web cases should start higher is a product call"
]
}
Merged 2026-10-29T04:59Z as 66c63cb, from head 486d3f5, which is the head the seat ACCEPTed (6488364174).
main CI on 66c63cb
GET /commits/66c63cb/check-runs
All 6 runs success.
State:
Fixed: the public web-to-case form no longer asks a guest for a priority. A guest submission that arrives as Critical is capped at High on the server. The form shows the hint 「紧急故障请拨打服务热线」, and the guest fields read "Your name" and "Your email".
Product call left open: web cases now arrive at the default priority (Low). The seat is raising that with the director.
Platform gaps: the option-subset, thank-you and section-description rows are objectstack#27398.
Card: closed with the merge (Fixes #2368). The seat removes pm:dispatched in this stroke.
Activity
objectstack-fleet commentedon Oct 29, 2026
Dispatch order · #2368 ·
repo:hotcrmseat 1 ·huangyiirene· sessionsession_01J8VVAnPkgK6CWrJa6t7Fk5· 2026-10-29T04:22ZThis order takes the slot freed by #2371 (PR #2376). It is UX card 4 in Irene's queue order: #2371 → #2366 → #2367 → #2368 → #2369 → #2370. The card body is the spec, and its guest-priority ruling is Irene's and final. #2367 holds the other slot.
Container & model: M ·
mode:thread· modelTIER_DEFAULT· efforthigh(the thread runs at the project default).Role file:
objectstack-ai/objectstack.claude/agents/os-dev.md. Read it in full. hotcrmAGENTS.mdbinds. Re-measure onorigin/main(495bff5or later).Writes:
pr_create: draft, basemain,assignees: [huangyiirene].scripts/pm/post-stamped.mjs.Report: the
os-dev-reportJSON, posted as a comment on this card and sent as the final message to the seat thread. ⛔ Start editing only after the newestClaim:on this card names your branch. Push work in progress at each milestone, so a stop loses nothing.Scope notes
POST /api/v1/forms/<web-to-case>/submit) withpriority: critical. Today it answers 201 and escalates (CASE-00041).hotcrm-browser-pass-howtofirst.PM mechanism assumptions
Serial constraints: none known. #2367 edits navigation and views.
Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
Claim: PM loop round 1
Session:
session_01J8VVAnPkgK6CWrJa6t7Fk5Account:
huangyiireneBranch:
claude/project-thread-45r09qWorktree:
hotcrm-issue-2368(card thread; branch is platform-designated, the measured platform exception toclaude/issue-N-slug; implementing sessionsession_01J8VVAmA6c9KrsMQiv9s7ak)Domain:
repo:hotcrm(single-lane repo, nodomain:*)Seat:
repo:hotcrm#1File surface: the web-to-case and contact-us public form metadata, the case hook path that receives the anonymous submit (guest priority cap), case/lead labels and help text shown on the forms (+ translation entries, no file moves),
test/for the forms and the cap, the Service Manual and web-form docs pages (en + zh, site en/zh-Hans/zh-Hant), one changeset; ⛔ permission sets, positions, sharing (stop on breach; explain in the report)Container & model:
M,mode:thread,model: TIER_DEFAULT (sister repo, hand-derived),effort: the order asked high; the thread runs at the project default, which only the maintainer setsClause-②: no
Metadata-protocol: none
Responsibility: #2368 UX card 4: guest priority max High (form + submit door, measured first), hotline hint, guest-facing copy, no pre-filled zero, case number on thank-you
Thread-read: 6487867778
Premise: holds — re-read at claim on hotcrm
origin/main495bff5(order comment 6487867778)Serial constraints cleared: none known — #2367 edits navigation and views
test(web-forms): the anonymous door and the guest branch never store …
docs(service): the public support form, its hotline hint and the gues…
objectstack-fleet commentedon Oct 29, 2026
repo:hotcrm#1 · huangyiirene · session_01J8VVAmA6c9KrsMQiv9s7ak
os-dev-report
{ "issue": 2368, "status": "done", "branch": "claude/project-thread-45r09q", "pr": "https://github.com/objectstack-ai/hotcrm/pull/2378", "session": "session_01J8VVAmA6c9KrsMQiv9s7ak", "premise_still_valid": true, "summary": "Measured on 495bff5 (18.2.0): a public form cannot restrict a select's options per form (a form-row options subset is served by GET /forms/support but /_console/f/support still lists all four), and POST /forms/support/submit with priority critical answered 201 and stored an escalated critical case. Per the ruling's fallback, priority is off web_to_case (the door drops it, the case takes low), and the guest branch of case_sla_defaults caps a guest critical at high (capped, not refused: the case is real and the hotline hint covers a P1). Hotline hint as the section description, guest labels Your name / Your email in en, zh-CN, es-ES, ja-JP; Service Manual (en/zh) and the Cases site page (en/zh-Hans/zh-Hant) updated. Rows 2 (currency placeholder 0.00) and 3 (case number on thank-you) are platform-only, no change.", "tests": "pnpm verify at 486d3f5: validate, typecheck, lint, hygiene, hygiene:tokens, build green; vitest Test Files 252 passed (252), Tests 4823 passed | 1 skipped; VERIFY_EXIT=0. New test/web-to-case-guest-priority.test.ts (5); updated case-sla-matrix, flow-escalation-ownerless-case (new systemInsert helper), case-create-form-narrowing, case-guest-branch-leftovers (comments). Ablations, exact-anchor replace, restored with git checkout HEAD, git diff HEAD empty after: A1 cap line removed -> web-to-case-guest-priority + case-sla-matrix 2 failed | 39 passed; A2 priority back on web_to_case -> web-to-case-guest-priority 2 failed | 3 passed.", "gates": "local: pnpm verify exit 0 at 486d3f5 (the repo's whole chain; hotcrm has no dispatch-gates derivation). CI on PR #2378 at open: Label Pull Request success, Vercel Preview Comments success; Build and Test (22.x), Check Changeset, Playwright, Typecheck and Build, link-check, Quality Checks, Analyze Code in_progress.", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "6 — github issue_read x3, pull_request_read x2 (PR #2376 body as template, #2378 check runs); claude-code-remote subscribe_pr_activity x1. No GitHub MCP write.", "api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/hotcrm/pulls draft + POST issues/2378/assignees), this os-dev-report comment via post-stamped.mjs. Plus git push of the branch (not REST).", "open_questions": [], "out_of_scope_findings": [ "class: a · reach: /_console/f/support renders all four crm_case.priority options when the web_to_case row declares options [low, medium, high] (screenshot probe-form-option-subset-ignored-en.png in project files issue-2368), and POST /api/v1/forms/support/submit accepts a value outside the row subset (registerFormEndpoints checks keys and required only) · 18.2.0 has no per-form option filter · dedupe words: public form option subset, form field options ignored, anonymous form select options", "class: a · reach: /_console/f/contact-us Annual Revenue shows placeholder 0.00 on an empty optional currency field, reading as filled in (console ui-components CurrencyField placeholder fallback 0.00) · dedupe words: currency placeholder 0.00, empty currency field", "class: a · reach: /_console/f/support after submit shows Thank you! with no case number: the submit answer is the id only, thank-you title/message have no interpolation, and submitBehavior is not translated · dedupe words: thank-you message record number, submitBehavior translation, public form confirmation", "carrier: Irene · noted, not filed: a web case now arrives at Low; whether web cases should start higher is a product call" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
Landed ·
repo:hotcrmseat 1 · sessionsession_01J8VVAnPkgK6CWrJa6t7Fk5· 2026-10-29T05:28ZGET /pulls/237866c63cb, from head486d3f5, which is the head the seat ACCEPTed (6488364174).mainCI on66c63cbGET /commits/66c63cb/check-runssuccess.State:
Fixes #2368). The seat removespm:dispatchedin this stroke.Generated by Claude Code