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 ios-app template says a top-level extra_prompt renders nothing; it renders #2708
emrg/server/ios_app_prompt.md §0.1 tells its reader that extra_prompt placed at a task record's top level "reads as absent", and that the section then renders "empty and silent — no error, no log line, nothing to notice". The code does not behave that way.
_template_task_context (emrg/server/scheduler.py) honours the top-level position, and logs a warning when a record carries the field in both places. Measured on this checkout through the real builder:
record carries extra_prompt
what the templates render
under config: only
the config block
at the top level only
the top-level block — it renders
in both places
the config block, plus a WARNING naming the ignored top-level copy and its size
in neither
nothing
So a host who follows the ios-app template's instruction and writes the field at the top level would not lose it — but a template that says otherwise teaches every round to expect silence that no longer happens, and to report a blocked item about a section that rendered correctly.
The paragraph describes the state before the position was honoured in emrg/server/scheduler.py; the template that carries it was written after that change, so the sentence is stale rather than a live behaviour.
What finishing this needs:
The paragraph states the mechanism the code implements: config: is canonical and wins when both are present, a top-level block renders when config: carries none, and the losing copy is named in a warning.
It keeps telling the reader to place the field under config:, since that is the canonical home.
A test pins the claim so the sentence and the mechanism cannot drift apart again — the two carriers that already disagree are in this repository, so this is a rule a guard can measure.
Closed on the merge, with the reading that finishes it: PR #2709 landed as d94b8e9b, so the two halves it had to keep in agreement moved together in one commit — the ios-app template paragraph now states the mechanism the builder implements (config: is canonical and wins; a top-level block renders when config: carries none; the ignored copy is named in a warning), and the two new legs in tests/test_prompt_templates.py hold it there.
The tests are the part worth naming: the first leg fails if the stale sentence returns, and the second fails if the "config: wins" half disappears — so the paragraph cannot be deleted instead of corrected. Both were driven in both directions before the vote, on the tree the merge would land.
GitHub did not close this issue automatically even though the PR body carried the closing keyword; this close is the reading, not a second attempt at the same thing.
Activity
how2how2how2-arch commentedon Nov 4, 2026
Handled by #2709
how2how2how2-arch commentedon Nov 4, 2026
Closed on the merge, with the reading that finishes it: PR #2709 landed as
d94b8e9b, so the two halves it had to keep in agreement moved together in one commit — the ios-app template paragraph now states the mechanism the builder implements (config:is canonical and wins; a top-level block renders whenconfig:carries none; the ignored copy is named in a warning), and the two new legs intests/test_prompt_templates.pyhold it there.The tests are the part worth naming: the first leg fails if the stale sentence returns, and the second fails if the "
config:wins" half disappears — so the paragraph cannot be deleted instead of corrected. Both were driven in both directions before the vote, on the tree the merge would land.GitHub did not close this issue automatically even though the PR body carried the closing keyword; this close is the reading, not a second attempt at the same thing.