Skip to content

moooon

Motir

Vibe your whole project. Bring an idea — Motir's three AI layers plan it, track it, and ship it, end to end. You're looking at Motir, built in Motir.

  • Vibe Project
  • Open Source
  • AI Agent
  • AI Loop
1
requests
0
upvotes
145
planned
1,361
shipped

Motir · Work items

MOTIR-231Done

4.3.6 Project Estimation settings panel (`settings/project/estimation`) — statistic + scale + custom-scale editor + settings nav card (admin-only)

Estimate: 24m · Depends on: 4.3.1, 4.3.3

The project Estimation settings panel — the admin surface that configures the estimation statistic + the point scale, sibling of the Workflow + Board settings panels. Drawn per design/estimation/estimation-settings.mock.html; binds to 4.3.3 getEstimationConfig / updateEstimationConfig. Mirror: Jira board Estimation settings (rung 1), at project scope (the module-header deviation).

Route + nav. A new settings/project/estimation page under the existing project-settings shell (alongside settings/project/board + workflow), and an Estimation settings-hub nav CARD on the project-settings index (mirror BoardSettingsCard / WorkflowSettingsCard). Admin-only — the same project-admin gate the workflow/board settings pages use (a non-admin is denied / sees a read-only or forbidden state).

The form. Reuse the settings-card + FormField + Segmented chrome:

  • Estimation statistic — Story Points (default) · Time estimate · Issue count (a Segmented / radio group), with helper copy on what each means + that it drives what the backlog/board/scrum show and the roll-ups sum.
  • Point scale — Fibonacci (default) · linear · custom (shown only when statistic = Story Points — the scale is a story-point concept).
  • Custom-scale editor — an editable list of numeric values, shown only when scale = custom; validates non-empty + numeric (the 4.3.3 InvalidScaleConfigError surfaced inline).
  • Save — calls updateEstimationConfig (optimistic-with-reconcile, the settings-page contract); a success/error affordance.

Tokens + a11y + i18n. Colour via --el-*, shape via element shape tokens (CLAUDE.md); the form is keyboard-operable + properly labelled; the panel copy + the nav card get settings.* / estimation.* i18n keys in every shipped locale.

Out of scope here: the per-issue badge/picker (4.3.4 — which READS this config); the roll-up displays (4.3.5); any board-level estimation override (this product configures estimation per PROJECT, not per board — the justified deviation).

Acceptance criteria

  • A new settings/project/estimation page (under the project-settings shell) + an Estimation settings-hub nav card (mirroring the Board/Workflow cards) read/write the project estimation config via 4.3.3; admin-only (the project-admin gate; non-admin denied/read-only).
  • The form offers the statistic selector (Story Points default / Time / Issue count), the point-scale selector (Fibonacci default / linear / custom, shown for Story Points), and the custom-scale editor (numeric list, validated, shown only for custom); Save calls updateEstimationConfig optimistically with a success/error affordance.
  • Switching the statistic changes which value the planning surfaces show + the roll-ups sum (verified via 4.3.4/4.3.5 reading the config); changing the scale changes the picker deck.
  • Colour via --el-*, shape via element tokens, AA-safe, keyboard-operable + labelled; copy has i18n keys in every shipped locale; matches design/estimation/estimation-settings.mock.html.
  • Component tests assert the form render + the statistic/scale selection + the custom-scale validation + the admin gate (non-admin forbidden) + the optimistic save.

Context refs

  • design/estimation/estimation-settings.mock.html + design-notes.md (4.3.1) — the panel spec
  • app/(authed)/settings/project/board + workflow + their _components/*SettingsCard.tsx (BoardSettingsCard / WorkflowSettingsCard) + settings/project/page.tsx — the settings-page shell + nav-card + admin-gate pattern to mirror
  • Story 4.3.3 (getEstimationConfig / updateEstimationConfig + InvalidScaleConfigError / EstimationConfigForbiddenError) — the read/write this binds to
  • components/ui/* (FormField, Segmented, the settings card, Button); the prodect-i18n-threading-pattern; the Jira board Estimation settings as the mirror; motir-core/CLAUDE.md