Repository navigation
Description
What is observed
emrg/server/open_source_prompt.md §3.1.1 tells a cycle to wait for an answer it cannot receive:
A large change is discussed before it is built: when the contribution is bigger than a fix — a new
feature, an API change, a refactor — say what you intend on the issue (or open one) and wait for a
maintainer's word. A PR nobody asked for, on a direction nobody agreed to, is the one that gets closed.
A cycle is one scheduled run of the task. Nothing in the daemon suspends it, and nothing re-enters it
when a reply lands: the next cycle is a new run that starts by reading the world again. So the instruction
has no executable meaning. Obeyed literally it produces one of two failures — a cycle that idles on an
answer that will not arrive inside its own run, or a cycle that ends with the question asked and nothing
written down, so the next cycle cannot tell that a direction was already raised and asks again.
Where the same subject is already stated correctly
emrg/server/feishu_prompt.md asks a human and says exactly what happens next:
Send it this round, carry on without waiting for the answer, and read the answer next round with §1's
recipe.
… Asking is not blocking; sending is.
That is the shape a scheduled run can execute, and it is pinned by tests/test_scheduler.py. So the two
built-in templates disagree about one subject, and the open-source template is the side that is wrong.
A task that follows it cannot distinguish "asked and awaiting" from "nothing done", which is the reading
§4 exists to produce.
What is expected
Asking a maintainer stays a step of the cycle, and the cycle ends there rather than waiting:
- The intention goes on the issue (or into a new one) — that part is unchanged, and so is the rule it
protects: a PR nobody asked for, on a direction nobody agreed to, is the one that gets closed. §4item 4 — what is blocked, and on whom — is where the question is recorded, so the next cycle
inherits it as state instead of re-deriving it.- The answer is read from the issue's own thread by a later cycle, which is where §1.1 already sends it.
- The wording states that asking is not waiting, so a cycle does not treat "no answer yet" as a reason to
re-ask every run or to attempt the change uninvited.
What the fix must satisfy
- The phrase "wait for a maintainer's word" is gone, and no synonym of it survives in that section.
- The replacement says what a cycle does instead: it ends the cycle with the question on the issue and the
block recorded in§4. - The rule's substance is kept — a large change is raised before it is built, and an uninvited PR is the one
that gets closed. - A guard pins both directions: the replacement is present and the removed phrase is absent, asserted
over a subject the test has first shown to be there, so a template that failed to render cannot pass. - Deleting the replacement must redden that guard.
emrg/server/feishu_prompt.mdis unchanged — it already carries the executable shape, and this issue
makes the sibling agree with it rather than the other way round.
Where the change lands
emrg/server/open_source_prompt.md §3.1.1, plus the guard in tests/test_scheduler.py beside the other
open_source_prompt.md pins.
Activity
argszero commentedon Nov 5, 2026
Handled by #2729