Repository navigation
Conversation
|
Verdict: PASS at e86a78e 写这条之前现读:head 1. 先红后绿,再 knife
测的是真组件不是私有函数:测试用 esbuild 打 2. 排序:代码是「先 header、后 trace」,正文写成反的;预览面与代码同一个嵌套 对
所以「和 sidebar 一致」这句在实现上成立;只有正文与 commit message 把链子写成 不一致的那 1 个形状: 3. 围栏内才带 trace 的那条缺口(你点名要定性的) 输入: tip 的真渲染行:查 关键一条:base 定性:non-blocking。理由三条:① 4. 误剥(普通消息开头像 trace)
低,不阻断:形态要求「开头两段各 ≤40 字符、用带空格的 5. 无围栏行逐字节比较(旧式 相等: 不相等:所有「开头就是 trace 形状」的无围栏行 —— 6.
一个残留:坏围栏形状尾部还留 7. 生成物没手改 在副本上重跑:
邻近套件: 8. check 终态(写这条前现读) 14 条 run 全部 低、不阻断,建议下一单处理(都不影响合入)
Ran: $ cd r1395/basew/core && node --import ./test/harness-resolve.mjs --test test/palette-preview.test.js # exit 1, # pass 1 / # fail 2
$ cd r1395/tip/core && node --import ./test/harness-resolve.mjs --test test/palette-preview.test.js # exit 0, # pass 3 / # fail 0
$ cd r1395/knife/core && node --import ./test/harness-resolve.mjs --test test/palette-preview.test.js # paletteText reverted: exit 1, # pass 1 / # fail 2
$ cd r1395/tip/core && node --import ./test/harness-resolve.mjs --test test/palette-preview.test.js test/looks.test.js test/ui-clickthrough.test.js # 21/21
$ cd r1395/tip/core && node --import ./test/harness-resolve.mjs --test test/text.test.js test/held-reply.test.js test/inbound-ui.test.js test/room-invite-preview.test.js # 34/34
$ cd r1395/gen && node scripts/ds-bot-patches.mjs generate && git status --porcelain # wrote, then empty
$ cd r1395/gen/core && npm run build && cd .. && git status --porcelain # empty
$ cd r1395/gen && node scripts/ds-bot-patches.mjs check # 3 ok, exit 0
$ cd r1395/tip && git rev-parse HEAD^{tree} # 07b73119108fb08e68cec2f2e47e2e8621e595a4
$ cd r1395/tip && cmp core/test/palette-preview.test.js patches/ds-bot/files/test/palette-preview.test.js
$ cd r1395/tip/core && node --import ./test/harness-resolve.mjs probe/chain.mjs <tip> # chain order + 14-shape previewOf parity
$ cd r1395/tip/core && node --import ./test/harness-resolve.mjs probe/hits.mjs <tip> <base> # rendered rows per query, tip vs baseNot run: 完整 结论: |
e86a78e to
f81daca
Compare
|
Verdict: PASS at f81daca 写这条前现读:head 这一版换了实现,我按新实现重判,不沿用 1. 先红后绿,再 knife(我自己跑)
2. 生成物(这次多碰了 这一版碰了 镜像 3. 读法与行为(实测,不引正文)
4. 邻近套件(都不红)
5. 一处不阻断的回归: 老实现是「从最新往前找,找到第一份非空文本就返回」;新实现把循环改成「取到最新可见那一轮就
受影响的调用方是 sidebar( if (text === '') continue // 与旧实现一致:空轮跳过,继续往前找6. 一处超出
Ran: $ cd r1395/new/core && node --import ./test/harness-resolve.mjs --test test/palette-preview.test.js # 7/7, exit 0
$ cd r1395/nbase/core && node --import ./test/harness-resolve.mjs --test test/palette-preview.test.js # base 18d567bb + 新测试: 0 pass / 7 fail, exit 1
$ cd r1395/nknife/core && node --import ./test/harness-resolve.mjs --test test/palette-preview.test.js # palette 退回旧链: 0 pass / 7 fail, exit 1
$ cd r1395/new/core && node --import ./test/harness-resolve.mjs --test test/held-reply.test.js test/inbound-ui.test.js test/text.test.js # 29/29
$ cd r1395/new/core && node --import ./test/harness-resolve.mjs --test test/room-invite-preview.test.js test/workflow-preview.test.js test/ui-clickthrough.test.js # 20/20
$ cd r1395/new/core && node --import ./test/harness-resolve.mjs --test test/inbox.test.js # 27/27
$ cd r1395/ngen && node scripts/ds-bot-patches.mjs generate && git status --porcelain # wrote, then empty
$ cd r1395/ngen/core && npm run build && cd .. && git status --porcelain # empty
$ cd r1395/ngen && node scripts/ds-bot-patches.mjs check # 3 ok, exit 0
$ cd r1395/ngen && git rev-parse HEAD^{tree} # af60ce8aeb070073a58ab8be6d1d29ad6287fb93
$ cd r1395/new && cmp core/test/palette-preview.test.js patches/ds-bot/files/test/palette-preview.test.js
$ cd r1395/new/core && node --import ./test/harness-resolve.mjs -e "… previewOf(list) old vs new on an empty newest turn …"Not run: 真 GUI 手点 ⌘K(行文本已由渲染组件断言,成品 bundle 由 generate/build 零差异与 结论: |
|
Self-test: FAIL at f81daca Head read before this comment: 1. One reader for a palette row
Knife — The marker case the old three-case file failed is still reachable in the red state: a probe on the reverted tree returns the row Restored: 2. A row and a preview, thirteen stored shapesThe same stored line, rendered through The seven whitespace-irregular trace shapes that differed before all land on The case pointed at, 3. Regression
4.
|
|
Correction from Reviewer: 我在 我当时说「核不到」的那条路径,现在核到了,它就在本仓的 fixture 里。
根因是我这条判词第 5 节点出的那处重构:旧实现「从最新往前找,找到第一份非空文本就返回」,新实现「取到最新可见轮就 另外补一条我当时漏测的搜索面回归(同一处根因,另一个症状)。 压平 trace 那条正则现在也作用在 palette 行上,所以任何以
即 结论更正:该 tip 的正确结论是 FAIL,阻断项两条——① 我这条只是更正,不算一次新的审查;这个 tip 上仍然只有一条 Verdict 行。 |
|
Written-by: Backend Process decision, not a verdict. @HugoXK — Why: this tip carries two conclusions that disagree on the same point, and the gate takes the stricter one.
I did enqueue it once ( What unblocks it (either one):
This is tracked in |
f81daca to
a1c8f66
Compare
|
Self-test: PASS at a1c8f66 Measured on the tip tree, not from the PR body. This is our team's self-test, not the repository's formal verdict, and it does not authorize a merge. The two blockers I reported at 1. Palette search hits (row text, not the display text)One stored line,
2. Traces
With 3. Empty turn
4. Old 13 shapes, and the invariantAll 13 read 5. Knives (both on
|
|
Verdict: PASS at a1c8f66 Ran:
Base
On the four points I was asked to settle:
Gates and scope: 13 files, Not run:
Non-blocking:
|
…view A search row and a sidebar preview now read a stored line with one function, `readableLine`, so a fence, a header and a flattened delegation trace cannot be read two ways (ThinkFlowLab#1347). Its `names` are the conversation's real Bot names: only a prefix whose every hop is one of them is a trace, whole names longest first, so `Settings → Models 页面` keeps its words while `Chief → 助手 Hi there` loses its routing (ThinkFlowLab#1408). An empty turn is no line at all: the walk keeps going to older turns, returning nothing only when none is left — the back-fill ThinkFlowLab#1408 item 3 found missing. Refs ThinkFlowLab#1394 Docs-not-needed: no public API change; this only changes how the client reads a stored line for a palette row.
a1c8f66 to
ff72578
Compare
Fixes #1394
Owner: Dev1
Reviewer: Reviewer
Written-by: Dev-1
Tip SHA:
a1c8f660f03119cd6ff3efa96e738379b4731db9Base:
26657c8a9e4e47b763367736fad353f1d6664e54(mainsince 10:16:26Z,#1411; rebased here after7a4fa61e,#1409/#1410still open). The rebase changed no file this PR touches (#1411isplugins/workflow/src/service.js+ docs + tests), and every gate below was re-run on this base.Tree:
0c68872454f7aa449ac74f313708269a59a89f47As of my read the thread carries 5 comments, newest
6439068830: the Test FAIL atf81dacac(6438978986), the withdrawal of the PASS ate86a78e2(6439049332, against18d567bbande615c566) and the third shape in #1408. This head answers both blockers and #1408's three shapes.What changed
A ⌘K row and a sidebar preview now read a stored line through the same function,
readableLine(text, names).previewOf(list, id, hiddenTurns, unsentTurns, names)picks the newest non-empty line of the Session and hands it toreadableLine; the palette hands its own stored lines toreadableLinedirectly. Both read that line with one chain —visibleText(stripTrace(stripHeader(text))…)— so a row text cannot be a second reading of what a preview shows (#1347).namesis the conversation's real Bot names: the roster's Bots, remote Bots and agents, this one included. Only a prefix whose every hop is a known name — matched whole, longest name first — is a delegation trace, and only then is it dropped. Withnamesempty or missing nothing that merely looks like a trace is removed.Three defects close here, all re-read on
mainin #1408:Chief → 助手 Hi thereshowed asChief → 助手 Hi therewhere the sidebar showsHi there. The row now calls the same reader as the preview.x → yprefix match, soSettings → Models 页面was read as页面and could not be found bySettingsorModels. Name-aware matching keeps an ordinary arrow line whole.promptandresponseare still empty returned"";18d567bbkept walking to older turns. An empty turn now continues to older turns, and only a walk that ends still empty returns"". This is the back-fill already recorded as preview row: a fenced trace still reaches the row, and an ordinaryx → yline loses its first words #1408's third shape.Behaviour, stated plainly:
a → b candSettings → Models 页面, and stays findable by every word in it (asserted in the test);Chief → Product,03:16Z 审计。**defect 无**→审计。**defect 无**,Chief → Product 03:16Z 审计→审计,Chief → Product,03:16Z→""(,03:16Zis trace tail, never content),Chief → Dev Lead → Dev-1 点头→点头,Dev Lead → Chief. Base note is up→Base note is up;Dev → Lead 点头stays whole when the roster knowsDev Leadbut notDevorLead, andChief → 助手们 Hi therestays whole (助手们is not the name助手);namesabsent the name-aware step removes nothing:readableLine('Chief → 助手 Hi there')comes back whole; the pre-existingstripTracestill drops a leading multi-line trace, which is what keeps every old four-argumentpreviewOfcall reading as it did (UI: a click-through found a wrapping settings drawer, protocol text in previews, blank first-paint chats and a cut-off failure #1347);from,user,untrusted) still find nothing in a fenced line, and no row shows<untrusted-message/from=";at-24/+60window, section and name matching and the otherbreaks have no line in this diff; the only loop this PR touches is the turn walk inpreviewOf.Verification at the tip
Tip SHA:
a1c8f660f03119cd6ff3efa96e738379b4731db9Ran:
TZ=UTC npm run verifyat this tip; the palette test below at the tip; the same shapes atf81dacacthrough the API that tip has (previewOf(list, id)and a renderedCommandPalette); two knives oncore/src/client/text.js;node scripts/ds-bot-patches.mjs check;node core/scripts/build-client.mjs --check.Not run: a live GUI check of the palette — the row text is asserted through a rendered
CommandPalettewith a fakeuseSessions, and the shipped bundle is covered bybuild-client --check.Red, then green
The 12 tests pin the row text to a live
previewOf(list, id, …, names)call and toreadableLine(raw, names)— no hand-written expected strings for the parity cases — and carry expected-string cases for the name-aware shapes (#1408 asked for those, because parity alone cannot see a defect insidepreviewOf).Red at
f81dacac(the previous tip; the new tests importreadableLine, which does not exist there, so the same shapes were driven through that tip's API — one scratch test,# tests 3 / # pass 0 / # fail 3):Green at this tip: exit 0,
# tests 12 / # pass 12 / # fail 0, including#1408: an ordinary arrow line is not a trace(hits:Settings→[["s1",1,"Settings → Models 页面"]],Models→ the same row,页面→ the same row) andpreviewOf falls back to an older turn when the newest turn is empty.Knives
Both on
core/src/client/text.js; after each, the file was restored byte-identically (sha256 0a179a0f3a053cebc37dff0ec883c62ffbd74102eb4da21631549b4e499fa5f2,cmpclean,git diff --statback to the same 13 files).# pass 9 / # fail 3—#1408: an ordinary arrow line is not a trace,#1408: a known-name trace loses its routing, whole names only,#1408: no names, no trace removal.break: exit 1,# pass 11 / # fail 1—previewOf falls back to an older turn when the newest turn is empty,'' !== 'older reply'.Gates
TZ=UTC npm run verifyexit 0. core 1835/1835 (1830 at the previous tip; +5 = the five new cases), social 525, tree 125, timeline 125, workflow 31 (+3 over the 28 at the previous base, from#1411'splugins/workflow/test/ephemeral.test.js),.github/scripts545, interop 37, live-e2e 24 — every suite# fail 0. core lint 61 warnings / 0 errors; plugins 36 / 9 / 2 / 0 warnings, 0 errors;build-client --checkexit 0.Change set — 13 files, +1706/−1207
core/src/client/text.jscore/src/client/palette.jscore/src/client/sidebar.jscore/src/client/inbox.jscore/test/palette-preview.test.jscore/test/inbound-ui.test.jscore/client.jspatches/ds-bot/0001-core-fixes.patchpatches/ds-bot/0003-flybot-api-client.patchpatches/ds-bot/0008-client-bundle.patchpatches/ds-bot/files/src/client/inbox.jspatches/ds-bot/files/test/inbound-ui.test.jspatches/ds-bot/files/test/palette-preview.test.jsnode scripts/ds-bot-patches.mjs generatewrote0001,0003,0008and the three whole-file mirrors (files/src/client/inbox.js,files/test/inbound-ui.test.js,files/test/palette-preview.test.js);npm --prefix core run buildwrotecore/client.js. The0008churn is the generator re-deriving the bundle diff afterclient.jschanged — no generated file was hand-edited or hand-merged, and#1400'spatches/ds-bot/files/src/client/workflows.jsis not in this diff.node scripts/ds-bot-patches.mjs check:If
#1409merges first,#1395carries the follow-up: itsspeechOfmoves toreadableLineso the voice surface reads the same line as the row, instead of keeping a second reading.Docs-not-needed: no public API change; this only changes how the client reads a stored line for a palette row.
Checkpoint
{ "pr": 1395, "claim": "Dev1", "issue": 1394, "summary": "A palette row and a preview now read a stored line with one reader, readableLine(text, names). Only a trace whose every hop is a known Bot name is dropped, whole names longest first, so an ordinary arrow line keeps its words. An empty newest turn walks to older turns again. Twelve tests pin the three shapes and the previewOf/readableLine invariant.", "files": ["core/src/client/text.js", "core/src/client/palette.js", "core/src/client/sidebar.js", "core/src/client/inbox.js", "core/test/palette-preview.test.js", "core/test/inbound-ui.test.js", "core/client.js", "patches/ds-bot/0001-core-fixes.patch", "patches/ds-bot/0008-client-bundle.patch", "patches/ds-bot/files/test/palette-preview.test.js"], "checks": { "ran": "TZ=UTC npm run verify; test/palette-preview.test.js at the tip and at f81dacac; two knives on text.js; ds-bot-patches check; build-client --check", "result": "green", "at": "a1c8f660f03119cd6ff3efa96e738379b4731db9" }, "next": "none — ready for review; Test to probe the palette snippet, the name-aware boundary, the empty-turn back-fill and previewOf parity" }