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 · Roadmap

MOTIR-4265To Do

Planning bug: MOTIR-4242 asserted "motir-core has no public-host accessor" from a grep for the literal host — the accessor exists and deliberately never spells it

Opened by Zhu Yue ·

Found by the motir run MOTIR-4242 session, 2026-09-03, before a worktree existed. The card's build premise was false; its DEFECT was real and reproduced exactly as written. Amended on MOTIR-4242's record rather than re-planned — the correction made the card SMALLER, not differently shaped, so no plan change was owed.

The false premise, and where it came from

MOTIR-4242's description asserts, with a command and a ref:

git grep -n "motir\.co" origin/main -- lib app/\(authed\) at b2d7798b2 finds no public-host accessor — only the API-docs example origins.

And its design source, design/projects/design-notes.md § The entrance — three doors, says the same thing in the same words:

motir-core has no public-host accessorgit grep motir.co lib app/\(authed\) at b2d7798b2 finds only the API-docs example origins — so the code card adds one

Both are false at that very commit. Run for myself, at b2d7798b2:

$ git grep -n "export function public" b2d7798b2 -- lib
b2d7798b2:lib/publicProjects/urls.ts:44:export function publicSiteOrigin(): string {
b2d7798b2:lib/publicProjects/urls.ts:50:export function publicProjectPath(identifier: string): string {
b2d7798b2:lib/publicProjects/urls.ts:55:export function publicProjectUrl(identifier: string): string {

publicProjectUrl() is exactly the accessor both documents commissioned: it is the SINGLE reader of MOTIR_PUBLIC_SITE_URL (asserted as a tree grep by tests/hosting/appUrlSeam.test.ts), it composes /p/<key>, and lib/baseUrl.ts:9-10 names it in its own header — two lines from the file the card told the builder to check first.

Why the grep could not have found it — the shape

The command is a correct measurement of a set the claim is not about. The claim quantifies over modules that answer "where is the public project page?"; the command enumerates files containing the literal motir.co. The accessor is absent from the second set BY CONSTRUCTION, and that is the whole reason it exists: it reads a variable and falls back, so the host appears in exactly zero source files. The better the module, the more certainly this grep misses it.

This is the lesson "A population claim is only as wide as the command that produced it" — the limb where the command matches something OTHER than the claim — reinforced against this occurrence. It is also the authoring-side twin of run.md's ⚠️ RE-MEASURE THE PREDICATE, NOT ONLY THE REF: the ref was named, the command was quoted, the command was runnable, and re-running it verbatim CONFIRMS the false sentence.

What it cost, and what it nearly cost

Cost: one investigation. The run followed the card's own hedge — "if MOTIR-3881 already exports a public-site accessor, use it rather than adding a second" — which is the sentence that saved it. That hedge is worth noticing: the author suspected the claim they had just measured, and wrote the doubt into the card instead of re-measuring.

Nearly cost, had the hedge been absent or unread: a SECOND reader of MOTIR_PUBLIC_SITE_URL, which fails tests/hosting/appUrlSeam.test.ts's single-reader assertion outright — and, worse, the card specified that second accessor with a hard https://motir.co fallback, the exact value lib/publicProjects/urls.ts's header forbids until the MOTIR-3910 cutover. Four consumers read that fallback (proxy.ts:76's don't-redirect-yet guard, lib/publicProjects/cors.ts's anonymous allow-list, lib/publicProjects/returnTarget.ts's hand-off check, and the changelog feed + follow digest). A builder who "used the existing one" by making the existing one match the card's spec would have started 308-redirecting /p/* off the app host before anything served it, with every local signal green.

Fix direction — a RULE change, in motir-meta

The corpus already carries the authoring rule (plan-rules/phase-deepen.md's NEGATIVE limb: a card explaining a defect by what does not exist owes the grep, not the verdict) and the run-time rule (run.md's re-measure the PREDICATE, not only the REF). Neither fired, and why is worth writing down rather than restating them louder:

A NEGATIVE claim about a CAPABILITY cannot be measured by a grep for a LITERAL, ever, and the corpus does not say so. Both existing limbs ask for the grep to be SUPPLIED and for the REF to be checked — both were. The missing sentence is about the shape of the predicate: when the claim is "no module answers question Q", the command must enumerate MODULES — exported symbols, the directory that owns Q, the neighbour module's own header — never an occurrence of Q's ANSWER in source text, because a module that owns a question characteristically does not contain its answer as a literal.

Suggested landing: one limb on plan-rules/phase-deepen.md's NEGATIVE rule, with this card's command pair as the fixture. Cheap, and it is the second time in this area that a motir.co grep has stood in for an accessor question.

Acceptance criteria

  • plan-rules/phase-deepen.md's NEGATIVE limb gains a PREDICATE-SHAPE clause: a "no X exists" claim about a capability is measured by enumerating candidate MODULES / exported symbols, never by grepping for the capability's answer as a literal — with git grep motir.co vs git grep "export function public" at b2d7798b2 as the fixture, both outputs quoted.
  • The clause states the tell a reader can apply without knowing the codebase: the better-designed the module, the less likely it contains the literal — so an empty result is weakest exactly where the claim matters most.
  • design/projects/design-notes.md § The entrance — three doors is corrected where it says motir-core has no public-host accessor, so the design and the plan stop agreeing on a false fact. (Check first for a sibling card already rewriting that paragraph; if one exists, cite it and skip rather than opening a second PR against it.)
  • No THIRD home is created: the addition is a limb on an existing rule, and the run.md twin is cited from it rather than duplicated.

Discussion

No comments yet.

Adding to this discussion signs you in on app.motir.co and brings you back to this request.

Add a comment