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
- 504
- planned
- 5,043
- shipped
- (motir-core) Playwright E2E + ACCEPTANCE VIDEO — a 2-option and a 4-option choice work item picked through the same port, the defect state, None-of-these, and a read-only viewer who sees no controlsApproval 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 coverage floor over the choice surface, the body → parse → raise → choose → `done` seam on real Postgres, and the guards coverage cannot seeApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) A choice WAITING and a choice DECIDED in the lists — `ApprovalRow`'s `decision_choice` branch on To approve and in the Approvals room, the chosen option on a decided rowApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) THE CHOICE PORT in the frame — the verb band derived from the options, the item page and the overlay, the defect state, the read-only state, the stamped record with the follow-up owed, and the user doc (en + zh)Approval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-ai) The story's VITEST gate — coverage over the `choice` vocabulary and pack surface, the author cell `(author, task, choice)` composing `type-choice`, and the guards on the corpus budgetApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) The lesson axis mirror admits `choice` — `add_lesson` / `search_lessons` `LESSON_TYPES` and the regenerated tool schemas, after `motir-ai`'s `LessonWorkType` accepts itApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) The decide door takes a CHOICE — `GateDecision` gains `choose` + `optionId` on the route, the server action and the service; picking stamps `outcomeRef` and the `chosenOption` snapshot and moves the item to `done`Approval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-ai) `choice` joins the planner's vocabulary — `WORK_ITEM_TYPES`, its gloss and executor default, the `type-choice` pack in the same words as `motir-meta`, the choice rule naming the type, and the lesson axisApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) The `decision_choice` KIND — `parseChoiceOptions` and its defect reasons, the registered handler, the gate RAISED on a complete choice work item, and `type: decision` raising none of itApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) The `choice` TYPE — the enum and its `AFTER 'decision'` migration, and every home the type set is pinned in, held by the story-gate vocabulary test at fifteenApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-meta) `type-choice.md` — the option-axis authoring bar and its two defects, routed by `split.py` and the selector, `kind-container.md`'s choice rule naming `task` · `type: choice`, MANIFEST regeneratedApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) AMEND `approval-gates.md` — `decision_choice` is keyed on `type: choice`, its verbs are the OPTIONS plus None-of-these, its subject is the parsed `## Options` section, and its record stamps the chosen optionApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) AMEND `work-item-type-taxonomy.md` — admit `choice` as the FIFTEENTH type (a person PICKS one of N options on named axes), and `decision` becomes the decided RECORD a person acceptsApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- The CHOICE gate — a person PICKS one of N options, each with its why, and what they chose is stampedApproval gates — every decision that holds work up happens IN Motir, behind ONE approve language new kinds join
- (motir-core) VERIFY on the DEPLOYED meta tenant — the migration ran, MOTIR-1465 is empty and archived, and a freshly filed planning bug lands in the folderSelf-improvement — auto-reported quality bugs
- (motir-core) The Vitest file selection diffs the PR's merge commit against a STALE base sha — what `main` gained since counts as the PR's own change, so a subset PR falls back to the full suite with no coverage gate
- (motir-meta) MIRROR.md's CITE-limb row names its twin as `phase-author (the same pack)` while the map pairs it with the lifecycle-verb constant on `criteria-author` — the one-cell divergence (`author/epic`) is unrecorded, and `--check` cannot see itSelf-improvement — auto-reported quality bugs
- 8.103 (motir-ai) code_audit and propose_convention read the code graph through the LOCAL-ONLY adapter and never hydrate the snapshot — every audit of an INDEXED repo on a machine without a warm cache measures nothing, grades "unknown" and says "your code meets the convention"
- (motir-core) The affected-test selection now picks a MEDIAN 73% of the suite on real pull requests — past `ci-affected-tests.md`'s own 50% no-go line — because ordinary service files reach 1,000+ specs through the import graph
- (motir-ai) Rung 1 was renamed THE REFERENCE PRODUCT, but the shipped planner still says "mirror product" in rung 3, the ladder's bounds, the decision bar, four walks and discovery — the vocabulary is half-renamed