You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
the family root's Makefile: under make -jN, every member's make warns jobserver unavailable: using -j1 and runs one job at a time #888
Goal: a person who types make -j4 bootstrap (or validate, siblings, park, resume) at a family root either gets the jobs they asked for in each member, or no warning that blames a rule they never wrote.
Filed by lane openRepoShape-5, from rv884's checklist candidate C1 in its review of #886 (#884), #886 issuecomment-6248806027. It is older than #884: rv884 measured it on 281df263 and on #886's head 82a84f88, under GNU Make 4.3.
Line
Under the holder's make -j2 bootstrap, every member's make prints make[1]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule. and runs serially.
The holder's bootstrap: rule (templates/family-root/Makefile) runs $(PYTHON) scripts/bootstrap.py, with no + and no $(MAKE), so make does not pass the jobserver to it. run_make's Popen (templates/family-root/scripts/bootstrap.py) also closes every file descriptor past stderr by default.
The member's make still finds -j and --jobserver-auth in the MAKEFLAGS it inherits, cannot open the jobserver, and warns.
The warning tells the person to edit "the parent make rule". That rule is the holder's pinned Makefile, which the person does not own.
The same holds for validate (bootstrap.py --members-make validate) and for siblings.py's member makes (siblings, park, resume). That is read from the Makefile, not run.
Direction, one of:
mark the holder's member-running rules with + and pass the jobserver's descriptors through (pass_fds), so each member's make gets jobs;
or take -j and the jobserver out of the MAKEFLAGS a member's make inherits, so it runs serially with no warning;
or document that members run one job at a time.
Verify:
Under make -j2 bootstrap at a holder with a member whose bootstrap target has two independent prerequisites, no jobserver unavailable line is printed. Its two jobs either run together or are documented as serial.
tests/test_family_holder_bootstrap_texts.py, tests/test_family_bootstrap_gate_order.py and the trio pass.
If the Makefile or bootstrap.py changes, each holder takes one upstream-changed row per pinned file (FAMILY_COPIED_VERBATIM).
Milestone: none set; lane 3's call. A warning and serial member runs under -j only. It is not a regression, and no verdict changes.
CLAIMED — lane openRepoShape-4, session 11c6c0ef-495a-4a05-94cf-811b7b0a1012@Eagle, 2026-10-18T14:13:36Z, for #888
Logged in lanes/log/openRepoShape-4.md at e14d599b50c4e9f90941eb87b4a617d96a368230.
The three reads (lane-collision-protocol Rule 1):
1. existing `CLAIMED —` comments on opensoft/openRepoShape#888:
none
2. `gh pr list --repo opensoft/openRepoShape --state all --search "#888"`, kept where the row or its body names `#888`:
none
3. `git ls-remote --heads git@github.com:opensoft/openRepoShape` branches naming `888` as a whole token:
none
Activity
brettheap commentedon Oct 18, 2026
CLAIMED — lane openRepoShape-4, session 11c6c0ef-495a-4a05-94cf-811b7b0a1012@Eagle, 2026-10-18T14:13:36Z, for #888
Logged in
lanes/log/openRepoShape-4.mdate14d599b50c4e9f90941eb87b4a617d96a368230.The three reads (lane-collision-protocol Rule 1):
the family root's bootstrap.py and siblings.py: `member_make_env` spl…
the family root's bootstrap.py and siblings.py: a member's make inher…
the family root's bootstrap.py and siblings.py: under GNU make 4.4's …