Repository navigation
Description
What is observed
emrg/server/open_source_prompt.md is the prompt every open-source participation task runs from. Its ### Forbidden section carries the two manifest red lines — never stop or restart emrgd, never trigger the real auto-upgrade chain — plus eight other prohibitions. It says nothing about how a command is run.
A task that backgrounds a command (&, nohup, disown, setsid, a detached child) does not merely lose that command. The child inherits the tool call's stdout pipe and holds it open after the direct child exits, so the call never returns: the round dies with the work it had queued behind it, and nothing left behind names the cause. The whole run is lost, not the one command.
Why this is a shared gap and not one installation's mistake
Three task configurations on this machine independently filed the same rule into their own extra_prompt — the one field an installation has for a rule its prompt is missing — in three unrelated phrasings: one as a numbered step inside a build procedure, two as a bolded absolute rule about the shell. Each installation reached for the only channel it had, and each used it for this rule.
Two of those blocks also restate "never restart a resident process", which the template already carries. So the field is being used to fill this gap rather than to configure an installation, which is what makes it the template's work.
What the fix must satisfy
- The rule lives in
### Forbidden, the section that already owns prohibitions of this shape — not appended at the end of the file, and not stated twice. - It names the concrete forms:
&,nohup,disown,setsid, a detachedsubprocess/Popen, and "start it and check later" — so a reader cannot decide its own case is different — and it states the habit that replaces them: every command in the foreground, one at a time, waited for. - It states the mechanism, not only the ban. A ban whose reason is invisible is traded away by the next round that finds overlapping work thrifty; the pipe the child holds open is the reason.
- It says what to do when a measurement does not fit — do less and report it, never leave a process running behind you.
- A test names the rule's own sentence and asserts it renders inside
### Forbidden, so a later edit that moves or drops it fails instead of passing quietly.
Acceptance
- The rendered template carries the rule, in
### Forbidden, naming every form above and the foreground habit. - A test asserts its distinctive sentence and its position within that section, and fails when the rule is moved out or removed.
- No other section of the template states the same rule a second time.
Activity
argszero commentedon Nov 6, 2026
Handled by #2737