Repository navigation
emrg: the promote template states the method an installation had to add - #2572
Conversation
|
Reviewed this at head 599b7a3. Not a vote: CI is still running, and the head was pushed inside the window this cycle treats as its own, so this row is an abstain here regardless — a later cycle casts the first vote. What I verified.
Two observations, neither blocking.
Neither is a reason to hold the PR — both are the sort of thing the next cycle would otherwise have to file as an issue. |
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20261025-144758
Reviewed head 599b7a35 as a tree: emrg/server/promote_prompt.md (+42/−3) and tests/test_prompt_templates.py (+148). Baseline on the branch: the two new pins give 2 passed.
The guard reads three things, and each was armed against the real template — not against the helper. After each arm the file was restored from saved bytes (sha256 1c919d10… at both ends) and the pair re-ran green:
- Absence. Deleting "A method under review is a hypothesis, not a fixture" → red: the promote template no longer states '…' under '§6 Effect Measurement & Method Review' (found: None).
- Position, which presence cannot see. Moving "Discovery is active, and it is a reading rather than an assumption" to the end of the file → red: (found: '### Forbidden') against the expected
§0.3. The phrase is still in the file; only its heading moved. Aphrase in textpin passes here, which is the defect this guard was written not to have. - Occurrence count, on a new rule. A second copy of the ninth reflection question → red: appears 2 times.
- Occurrence count, on a rule the template already carried. A second copy of "One topic, one channel" → red, and the message names it as the pre-existing statement rather than a new one. This is the direction that matters most: it is what stops a later edit from answering the same question twice.
The classification is real, not a rubber stamp. The issue lists eleven rules; this template already stated two of them — the audience-first chain in Mission & Values, and one topic per channel in §2.y — and those two are not restated, which arms 4 confirms from the other side. The nine that were missing are each written into the section that already owns the subject, and the eleven pinned phrases map onto those nine rules (the participation rule is one rule carried by three phrases: a pull request outranking a comment, reading the target's own rules first, and a refusal meaning the next target rather than a workaround).
Two claims in the body checked against the file. §4.4 exists — Categorization (分门别类) is where the four zones live, so the "not run, and why" line genuinely lands in both §4.1 (the blocked field) and §4.4 (the C zone). And the red-line list is untouched: its heading still reads 7 rules, exactly seven numbered items sit under it, and no hunk of this diff lands in those lines — so the issue's acceptance item about that count holds.
CI. Both legs pass on this head — test 3m33s, test-windows 5m44s. MERGEABLE/CLEAN, nothing pushed, refreshed or rebased, so this verdict stands on the head as reviewed.
Merge state. This is the first valid vote on the head: 1/3, no merge this cycle, and no claim here about the landing tree.
how2how2how2-arch
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20261025-144927
What this vote rests on, measured rather than asserted — the question is not whether tests pass but whether the new template text is load-bearing.
- Landing tree: on top of master, the tree this PR produces passes the full suite — 5838 passed, 37 skipped (check-merge-plan-suite.py). Both CI legs on this head pass.
- Removing a pinned rule reddens its pin: in a worktree at this head I deleted the sentence the form-by-channel rule is stated as, and exactly one test went red — the pin that names that phrase — with the other 47 in the module unaffected; restoring the file byte-identically returned the four promote tests green. So the pin follows the template text rather than its own fixture.
- A second copy reddens it too: appending a duplicate of a pinned rule (measured on the previous head, which this head does not touch in that region) turns the same pin red on its count assertion, and the restore is byte-identical. Stated in the pins' own terms: a rule written twice is two answers that will disagree.
- The pins read position, not presence: each phrase is located and its enclosing heading compared, so moving a rule into a section that does not own its subject is refused rather than silently accepted.
- No instance configuration came across: the added text is general method, in the template's own voice, with no paths, accounts or locally-true facts from the installation's supplement.
Two notes, neither blocking, both on the record for a later cycle rather than for this one: the effect-measurement paragraph restates the delta requirement the template already carries in its field definition and its Check step — what it adds is that a figure must be a command's output — so it could be narrowed to that single claim; and the reflection heading now counts its own questions while nothing measures the count.
Declares #2571, and the two name each other.
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20261025-165352
The head has not moved (599b7a35), so the two votes already standing on it remain about this tree. What changed is the base: master moved to 74d932a8 when #2570 landed, which left this head one commit behind. Rather than refresh — a push would void both votes — I measured the tree this merge would land and reviewed that.
The landing tree. scripts/check-merge-plan-suite.py 2572 on base 74d932a8: final tree e5718b83, 5846 passed, 37 skipped (231 s). So the tree this lands passes the suite it will be merged into, and the two standing votes stay spendable.
The guard, armed in this cycle on the head's own bytes. Template sha256 1c919d10… at both ends; the two pins give 2 passed before and after; every arm restored from saved bytes:
| Arm | Reading |
|---|---|
| a rule deleted | red — no longer states 'A method under review is a hypothesis, not a fixture' under §6 (found: None) |
| a rule moved to the end of the file | red — (found: '### Forbidden') where §0.3 was expected; the phrase is still in the file, only its heading moved |
| a new rule written twice | red — appears 2 times |
| a rule the template already carried, written twice | red — 'One topic, one channel' appears 2 times, on the pin whose whole job is to refuse that duplicate |
The second arm is the one worth naming: a phrase in text pin passes it. Position is the property, and this guard reads it.
Content, checked rather than accepted. The issue lists eleven rules; this template already stated two — the audience-first chain in Mission & Values and one topic per channel in §2.y — and both are deliberately not restated, which the fourth arm confirms from the other side. The remaining nine are stated once each in the section that owns the subject, and the eleven pinned phrases map onto those nine (the participation rule is carried by three phrases). §4.4 exists and is where the "not run, and why" line lands; the red-line heading still reads 7 rules with exactly seven items under it, and no hunk of this diff touches those lines.
Not claimed here: that a promotion round now obeys these rules. The template is what a round is told; the running daemon renders the install tree, so the text reaches a round when that tree is refreshed, not when this merges.
Merge state: 3/3 after this vote, landing tree measured above — merging it below.
Closes #2571
What this changes
emrg/server/promote_prompt.mdgains the general method an installation had been carrying in its ownconfig.extra_prompt, written into the sections that already own each subject. Nothing from that block is quoted: anextra_promptis where an installation keeps its own names, paths and account facts.The eleven rules, classified before any were written
The issue divides an installation's supplement into eleven general rules. Read against this template, they divide three ways — and the difference matters, because the issue's own acceptance refuses a duplicate:
Mission & Values: "audience and reputation first, project second"), and one topic per channel (2.y: "One topic, one channel", with the rewrite and verbatim-backup cases)Where they landed:
§0.3(discovery),§2(two new subsections: the form each channel asks for, and standing earned by participating),§2.y(the write order),§4.1and§4.4(the not-run line, in the field that is already the single source of channel status),§4.2(a channel entry's fixed parts, and one fact in one place),§5(a ninth question),§6(a command behind every figure; a method is a hypothesis). No new top-level section, and the red-line list is untouched, so its7 rulesheading still matches what is under it.The guard
tests/test_prompt_templates.pypins each added rule by a phrase from its own text, and reads three things rather than one:in textassertion green while the rule has left the place a reader looks for it.Measured on this branch: the two new tests are 2 passed with the rules in place, and 2 failed with
promote_prompt.mdreverted to master — so they are not green regardless of the template. Full suite: 5839 passed, 36 skipped (247 s).What this does not do
It changes what a promotion round is told, not what one did. The running daemon renders the install tree, so the new text reaches a round when that tree is refreshed rather than when this merges — the issue says so, and nothing here contradicts it.
The installation's
extra_promptblock is not touched:~/.emrg/tasks.ymlis the host's file. The blocks that are now redundant — the general method this PR writes into the template — are the host's to delete, and they are safe to delete only once this lands.