Skip to content

The open-source task template never says how a command must be run #2736

Closed

Description

@argszero

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

  1. 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.
  2. It names the concrete forms: &, nohup, disown, setsid, a detached subprocess/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.
  3. 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.
  4. It says what to do when a measurement does not fit — do less and report it, never leave a process running behind you.
  5. 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

  1. argszero commented on Nov 6, 2026

    @argszero
    OwnerAuthor

    Handled by #2737

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions