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.