Per DIS-080: with fence markers retired, the diff view is where conflicts are seen and resolved. EXPECTED = the straightforward weave reading of base + all in-scope patch-ins (theirs layers, no WT layer). Green/red = wt compared to EXPECTED (local outstanding edits). Patched-in changes (EXPECTED vs base) render pale blue/orange — the other kind of in/rm, not salad/salmon. Tokens where both sides touch (conflicts) render yellow. All provenance comes from the weave — per-token origin ids — no separate diff3 pass.
con rows.shared/expected.js expectedOf() — patch.js mergeApply MINUS weave.foldWt: weave.build per side, weave.merge, mergedLive.ID_EXP), so ONE emitDiff spells side AND origin — no 2nd pass.custom) means PATCHED IN. C HUNK.c IGNORES that bit (probed), so --plain stays byte-identical; side 3 was rejected (C plain reads it as EQ and collapses the +/- pair).test/diff/18-patch-base asserts ^\+THREE$ on --plain after a patch and I may not edit it; provenance is a colour distinction, asserted on --color SGR digits (no ESC literal, so dash-safe). --plain output is unchanged for every provenance.wtlog.conflicts() is read in diff.js's expectedCtx and cross-checked at TEST level (status con tally == the yellow path) — path-granular only.DIFF_WASH, 256-cube bg): local 194/157 + 224/217 (unchanged), patched-in 153/117 (blue) + 223/215 (orange), conflict 229/227 (yellow — 229 not 230, which is the banner band).beagle/dog/hunk/HUNK.c, fn bro_classify_lines (the twin of view/bro.js classifyLines) + bro_classify/lineKind.in_b/rm_b, NEVER eq_b; row weight stays max(in_b,rm_b), total max + eq_b ([inline-vs-split-metric-max]). Break out p_in/p_rm to mirror the JS tally.bro_cell_ansi needs the same wash families (THEME slots for pale blue/orange + yellow) and the run-overlap → yellow rule, or the C pager will keep painting patched-in tokens salad/salmon.HUNKu8sFeedLineBased fixed 64KB/4KB side buffers throw hunk.render: out full on big files and SILENTLY truncate regions past 4KB (bare u8bFeed, refusal dropped) — the one libdog pass should fix both while touching HUNK.c.mergedLive), which is NOT merged — its 3 files were imported into this worktree by orchestrator order. DIFF-016 cannot land before PATCH-025.get/conf-state, get/confdrop, get/dirty, post/conf-state, status/conflict) ported byte-identical from //PATCH-025/test (gritzko-approved versions), all green + staged here. Sole remaining failure: post/patch-absorb (POST-035's row-based gate) — 320/321.///be/#5c0d5c21: the wt's own markerless weave conflicted get.js/weave.js and token-glue left get.js unparseable (267 fails); resolved by hand — weave3 (now in shared/weave.js) renders via mergedLive returning {bytes, spans}, both callers adapted (get.js:1275 binding restored, shared/checkout.js spans-not-markers — checkout.js is NOW PART of this tree's staged set). Suite back to 315/321.DIFF-016: EXPECTED-based diff colours//DIFF-016 (jab put): new shared/expected.js; edited views/diff/diff.js, view/bro.js, view/theme.js; imported (PATCH-025) shared/weave.js, verbs/patch/patch.js, verbs/get/get.js.//DIFF-016/test: new test/diff/{19-patch-provenance, 20-patch-conflict,21-patch-stacked}; imported PATCH-025 conflict goldens.Pager.render() probe (tty.openpty, raw mode): all five washes reach the real frame bytes.