moooon
Motir
Vibe the 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
- 6
- requests
- 4
- upvotes
- 597
- planned
- 5,376
- shipped
- A DONE DESIGN IS FINAL — a design card in the done status accepts no new version: publish, upload and withdraw are refused with the way forward, and reopening the card by hand is the only door backApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) THE `approval:view_any` PERMISSION — named in the catalog as `planned`, held by the role sets that should hold it, grantable to a custom role, with its inventory row and its role-grid copyApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) Playwright acceptance E2E + VIDEO — a reader with `approval:view_any` and a reader without it open the SAME room and see different rooms, and a decided record is still there afterwards (en + zh)Approval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) The story's VITEST GATE — the two views proved by LEAKAGE, a CUSTOM ROLE proving the view follows `approval:view_any` not a role name, the nav map's totality, and the coverage floorApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) THE ROOM AND ITS DOOR — `/approvals`, the two sections in one list, and the nav row registered in the ONE map both the rail and the palette readApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) THE RECORDS READ — one service method whose scope follows the `approval:view_any` PERMISSION, the routing predicate REUSED, and the `decided_by_id` index the own-records half has never hadApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- THE APPROVALS ROOM — a first-class nav destination holding every approval record, pending first then decided; `approval:view_any` shows the project's, everyone sees their ownApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) `/items` "New folder" silently does nothing when clicked before the streamed tree registers its handler — and `bug-destination.spec.ts:109` clicks it in exactly that window, ejecting unrelated PRs from the merge queue
- (motir-core) The merge-mode card still says "Motir does not merge pull requests yet" once MOTIR-4882 merges — and MOTIR-4880's accepted receipt pins the sentence
- (motir-core) A DECIDED approval whose subject bytes are gone still shows state X's "You cannot approve what cannot be shown." under its own record
- (motir-core) ENTERING REVIEW ASKS AGAIN — a move into In Review raises a fresh `awaiting` gate over the item's current subject when none is awaiting or approved, through a registry seam every registered kind suppliesApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) Playwright acceptance E2E + VIDEO — the status control says it can't be moved directly and its Review & approve button opens the overlay, a board drag refuses on the card, approve, reopen by hand, and a reader who cannot decide gets no button (en + zh)Approval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) Story VITEST gate — the coverage floor over the guard, the withdraw and the re-ask, one refusal per door (service · board move · status action · MCP · v1), every non-owned move still legal, reopen after approval, and a fixture kind driving the guardApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) The board and the list REFUSE IN PLACE — a refused drag or inline status edit shows the pending-decision refusal where it happened, with the door, instead of the snap-back toast (en + zh)Approval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) The item page, quick view and edit page SAY SO ON THE STATUS CONTROL — "Status can't be moved to {status} directly" with a Review & approve button into the overlay, and the held option in the dropdown (en + zh)Approval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) PULLING THE WORK BACK WITHDRAWS THE QUESTION — a hand move out of review, or to Cancelled, supersedes the item's `awaiting` gates in the funnel's own transaction, taking the gate lock in the decide door's orderApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) THE GUARD — `applyStatusTransition` refuses the transition an `awaiting` gate owns, read from the registry, with the decide door's own write exempt, and `APPROVAL_GATE_PENDING` answers identically on every doorApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) AMEND `approval-gates.md` §6d — the manual-flip GUARD: the transition a gate owns, `awaiting` as the key, the decide door's own write exempt, and a hand move that pulls the work back WITHDRAWS the questionApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core · design) THE ITEM PAGE HANDS IT OVER — the gate section becomes a call-to-action band with ONE control, the three states the page KEEPS, and the no-gate case stated as unchangedApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core · design) The approve-and-merge verbs and their states — Panel 12c's band 3 through press, merging or queued, one PR refused, withdrawn by a push, and the To-approve rowApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join