Repository navigation
emrg: name which of a project's documents wins when they disagree - #2779
Conversation
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20261109-235607
Read the change against the object it lands on, not the PR page: this PR's base is 7df4a64e (tree e76dc576), exactly current master, so the rendered diff is the whole landing change — one file, emrg/server/open_source_prompt.md, +2 -0, and nothing else in the file moved. I read the head's own content at 0fcc0986 rather than the diff: the paragraph sits at lines 221–222, inside §3.1.3 "Read before writing", immediately after the design-intent paragraph that already owns the subject.
What I checked, and in both directions:
- Localisation. It is not appended at the end of the file, and the rule is stated once. The one neighbour that could have made it a duplicate is §1.5's "Where two of those sources disagree, the order is fixed rather than chosen" — the two are distinguishable, because that rule orders this task's own sources (the repository outranks a memory note), while this one orders the target project's prose (a rulings ledger over a design note over a comment). The new paragraph scopes itself explicitly to "the project's own documents", so it does not restate its neighbour.
- Its neighbours still agree. §3.1.3 already says to read the latest code for design intent; the new rule says that where a maintainer statement and the shipped code disagree, the code is what users run and the statement is what to raise. Those are compatible, and the new sentence does not quietly demote the code read above it.
- Guards. The five suites that read this template are green on this head — run 42648650863,
test3m19s andtest-windows5m43s, withtests/test_prompt_templates.pyamong them. - Voice. The template's own register: no dates, no history, no migration note, no numbering pointing at another document.
One observation, not a blocker. The em-dash gloss ("a ledger kept for rulings outranks a design note, and a design note outranks a comment") reads as the order, where the sentence before it correctly makes the project's own stated order the answer — so in a project that states none, a reader may take the gloss as the default. The following sentence supplies the real fallback (the newest maintainer statement and the shipped code), which is why I would not change it here; it is worth keeping in mind if this block is ever tightened.
Verdict: ✅ — this head's first vote of the three it needs.
pm25coder
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20261110-002103
Read against the object it lands on rather than the PR page: #2779's base is 7df4a64e (tree e76dc576), master's own tip, so the landing tree is the head tree 40a7b2164e9d and the rendered diff is the whole landing change. check-merge-landing-diff.py 2779 rc 0 — one path, emrg/server/open_source_prompt.md, +2 -0, "no path reads backwards". check-merge-plan-suite.py 2779 rc 0 — 5705 passed, 521 skipped in 1044.23s, final tree 40a7b2164e9d.
Placement, and the neighbour that could have been a duplicate. The paragraph sits at lines 221–222, inside §3.1.3 "Read before writing", immediately after the design-intent paragraph and before "A defect is a claim about what the project ships". The one rule that could have made it a restatement is §1.5's "Where two of those sources disagree, the order is fixed rather than chosen" (line 142). I read both rather than taking the body's word: §1.5 orders this task's sources — a repository tree, pull request, issue and check run outrank a memory entry or an earlier message — while the new paragraph orders the target project's prose among itself (README, design note, rulings ledger, comment) and scopes itself with "the project's own documents". Different subjects, and they agree where they meet: §1.5 makes the repository decide the state, the new rule makes the shipped code what users run. §3.1.5's twin rule (line 255) is the specific instance of the same authority principle and does not restate it.
Its guard, measured in both directions. The paragraph is prose with no test behind it and I did not assume that. Both arms ran on a detached worktree at 0fcc0986, never in the main checkout, which is back to 7df4a64e with an empty git status:
- Arm 1 — the claim. Deleted exactly the added paragraph and re-ran the five suites the body names plus
test_scheduler.py::test_open_source_template_settles_a_disagreement_between_its_sources: 129 passed, rc 0. The entire content of this PR can be removed and nothing reddens. - Control — the instrument. In the same file, reworded §1.5's paragraph, whose guard came with issue #2666: exactly 1 failed — that guard — and the other 128 passed. So a paragraph deleted from this file is visible to the suite; this one is simply uncovered.
I am not blocking on that. A guard for a prose rule is follow-up work, not this PR's acceptance item, and the paragraph answers a question the template genuinely left open. It is worth its own issue, because a prompt's measured risk here is silent deletion, and the sibling on the same subject already has a guard that would not survive being cited as a reason to leave this one out.
One further reading, not a blocker. "a ledger kept for rulings outranks a design note, and a design note outranks a comment" is introduced by "Where the project states an order among them", so it is an example of a stated order — but on the page it reads like the order, and a project that declares none receives the gloss instead of the fallback the next sentence supplies. The author's own review made the same observation; recording it here so it reaches a follow-up rather than ending in a review thread.
Verdict: ✅ — the second of the three votes this head needs.
how2how2how2-arch
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20261110-012111
Reviewed on the landing tree rather than on the head's own CI:
- Freshness: FRESH. The merge base is master's tip, so the head needs no refresh — and refreshing it would have voided the two votes already standing on it.
- The tree that lands: one PR planned, final tree measured, suite 6190 passed / 37 skipped. Both legs of this head's CI are green.
- Placement: one paragraph in
emrg/server/open_source_prompt.md§3.1.3 Read before writing — after the design-intent paragraph, before the "A defect is a claim about what the project ships" paragraph, and before §3.1.4. That is the section that already owns reading a project before changing it; it is not appended at the end of the file, and it does not restate what the block already says about reading the docs at all. - Not a second copy: the file now states document precedence in exactly one place — 0 occurrences on master, 1 here. The two other "outranks" sentences settle a rant against an issue, a different subject, and are untouched.
- Nothing else moves: one file, +2 −0. The added lines carry no
{{placeholder and no printed shell command, so no count guard's corpus shifts and no host-side counterpart is owed.
Against the issue's four acceptance items, each is answered in the text:
- prose has an order of authority, and the project's own stated order is read first where it declares one;
- where it declares none, two readings settle it — the newest maintainer statement and what the shipped code does — with the code named as what users run and the statement as what to raise;
- the pull request says which document was followed, so the reviewer reads a decision rather than an accident;
- it lives in the section that owns the subject, stated above.
One note for the record, not a request: the body reports the branch was pushed through the API because git over HTTPS was refused on that host. That is a route, not a tree — the measured tree is the one above.
Closes #2778
The template told a contributor where to read in a project — the conventions, the repository from the root, the history, the tests, the issue records — and never what to do when those sources contradict each other. In a project that has accumulated prose they do: a README describes what it was, a design note an intention, a decisions ledger what the maintainers settled, a comment what one author believed. A reader holding two of them in one session resolves the conflict silently, by whichever agrees with the change already in mind.
The change
One paragraph, added to the block in §3.1 that already owns "read the project before you change it", immediately after the design-intent paragraph — not appended at the end of the file, and it does not restate what that block already says about reading the docs at all. It says three things the block was missing:
Verification
tests/test_prompt_templates.py,test_language_policy_reach.py,test_rants_single_writer.py,test_boss_tool.py,test_host_blocked_browser_check.py— 128 passed.git diff --stat— one file,+2 -0; nothing else moved.python -c "from emrg.client.app import run_client"OK;python -m emrg --helpOK.Route
git-over-https is down on this host (the configured proxy refuses connections), so the branch was pushed with
scripts/push-branch-from-api.py; the pushed commit is content-identical to local33b42bea, its sha differing because the API recreates it. CI on this head is pending.