mirror of
https://github.com/mvschwarz/openrig.git
synced 2026-11-08 08:11:17 -10:00
feat(tui): picks-v4 clawd inward eyes + codex chevron hint (values finalize)
PICKS-OF-RECORD v4 (sha256-16 14afeb74, founder amendment via pm-lead, byte-verified; assignment 3c8e4665, qitem 266e4c14): - clawd eyes become literally '><' — left '>' right '<', pointing INWARD, squinty (image-cache 102): dark #181818 eyes on the #ad6755 terracotta field, 2-cell form unchanged. Founder rationale: edge-eyes do not read as eyes; inward brackets make it read as a FACE. Supersedes the round-4 outer-quadrant pair (kept in comment lineage). - codex blue-hint pick (item a): CHEVRON-ONLY — codexMark's '>' now carries the OFFICIAL sampled #6867aa (token codexBlue); '_' stays light ink; text stays exactly ASCII '>_' (web identity); detail/topology only. codexHintVariants stays as the decision-lineage record. - items b (mono icons kept) and c (motion approved) require no code change. Explorer mark-absence extended to ban the new '><' pair; every ▘▝-era pin updated citing the amendment; new chevron SGR pin on detail. Gates: TUI 212/212 · repo lint · TUI/CLI/daemon builds. Front-door is environment-flaky on this host today (PTY timeouts, counts vary 1-4 per run, PARENT-REPRODUCED at the clean base via stash round-trip in this worktree; the diff touches no packages/cli file). Never push. Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
1 parent
8fe43fd290
commit
2156f5307a
6 files changed
+45
-42
No files matched your search
Generated
+1
@@ -7473,6 +7473,7 @@
|
||||
"zod": "^4.3.6"
|
||||
},
|
||||
"bin": {
|
||||
"openrig-tui": "tui/dist/main.js",
|
||||
"rig": "dist/bin-wrapper.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -125,24 +125,25 @@ export function clawdFounderMark(): MarkSeg[] {
|
||||
];
|
||||
}
|
||||
|
||||
/** ROUND-3 LOCKED clawd row mark, round-4 quadrant-geometry correction (guard
|
||||
* finding 1): a SQUARE (2 cells ≈ square at cell aspect) with two quarter-
|
||||
* block EYES clearly APART — cell 1 carries the OUTER-LEFT quadrant (▘
|
||||
* U+2598 QUADRANT UPPER LEFT) and cell 2 the OUTER-RIGHT (▝ U+259D QUADRANT
|
||||
* UPPER RIGHT), so the inner half of BOTH cells is pure terracotta field and
|
||||
* the eyes flank a real center gap. (The prior ▝▘ order put the inner-right
|
||||
* and inner-left quadrants together AT the center seam — the rejected
|
||||
* center-bunched form.) Eyes sit high like the source grid; dark #181818 eyes
|
||||
* ON the #ad6755 terracotta field. */
|
||||
/** PICKS-V4 clawd row mark (founder amendment, PICKS-OF-RECORD sha256-16
|
||||
* 14afeb74, 2026-08-04 — a bounded refinement INSIDE the locked square-with-
|
||||
* eyes direction): the eyes are literally the characters `><` — left eye `>`,
|
||||
* right eye `<`, pointing INWARD, squinty (reference image-cache 102).
|
||||
* Founder rationale verbatim: eyes at the far edges do not read as eyes;
|
||||
* inward angle brackets make it read as a FACE. Dark #181818 eyes ON the
|
||||
* #ad6755 terracotta field, unchanged. (Lineage: round-4 shipped the ▘▝
|
||||
* outer-quadrant pair; superseded by this amendment.) */
|
||||
export function clawdSquareMark(): MarkSeg[] {
|
||||
return [
|
||||
{ text: "▘", token: "clawdEye", bg: "clawd" },
|
||||
{ text: "▝", token: "clawdEye", bg: "clawd" },
|
||||
{ text: ">", token: "clawdEye", bg: "clawd" },
|
||||
{ text: "<", token: "clawdEye", bg: "clawd" },
|
||||
];
|
||||
}
|
||||
|
||||
/** ROUND-3 codex blue-hint CANDIDATES (LOOK choice a — UNPICKED; the shipped
|
||||
* mark stays the approved plain form until the authenticated pick): each
|
||||
/** ROUND-3 codex blue-hint CANDIDATES — PICKED at picks v4 (14afeb74):
|
||||
* CHEVRON-ONLY, on detail/topology surfaces only (founder delegated; pm-lead
|
||||
* ruled the most restrained option). codexMark() below now ships the chevron
|
||||
* form; this record keeps the presented variants for decision lineage. Each
|
||||
* variant uses the OFFICIAL sampled #6867aa (token codexBlue), never a
|
||||
* remembered value. */
|
||||
export function codexHintVariants(): Record<"chevron" | "outline" | "none", MarkSeg[]> {
|
||||
@@ -170,13 +171,14 @@ export function clawdMiniB(): MarkSeg[] {
|
||||
return clawdDownsample(3, 1)[0]!;
|
||||
}
|
||||
|
||||
/** Codex: the `>_` prompt mark, light-on-dark (the web mark is `>_` in a
|
||||
* light circle; the terminal-cell form keeps the glyph pair). */
|
||||
/** Codex: the `>_` prompt mark with the PICKS-V4 CHEVRON-ONLY blue hint
|
||||
* (item a, 14afeb74): the `>` carries the OFFICIAL sampled #6867aa; the `_`
|
||||
* stays light ink. Text stays exactly ASCII `>_` (web-identity: the SAME
|
||||
* mark, not a cousin; ❯ remains vetoed). This mark renders on detail +
|
||||
* topology surfaces only — the explorer carries no marks (locked). */
|
||||
export function codexMark(): MarkSeg[] {
|
||||
// the LOCKED token is `>_` (web mark verbatim); any restyling (e.g. ❯) is
|
||||
// a founder-LOOK question, not a driver choice (guard finding 4)
|
||||
return [
|
||||
{ text: ">", token: "markInk", bold: true },
|
||||
{ text: ">", token: "codexBlue", bold: true },
|
||||
{ text: "_", token: "markInk", bold: true },
|
||||
];
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ const MARK_SGR = {
|
||||
markInkFg: "38;2;250;250;249", // codex `>_` light ink
|
||||
codexBlueFg: "38;2;104;103;170", // OFFICIAL sampled #6867aa
|
||||
} as const;
|
||||
const MARK_GLYPHS = /[▘▝▖▗▚▞▐▌█▀▄╹]|>_/;
|
||||
const MARK_GLYPHS = /[▘▝▖▗▚▞▐▌█▀▄╹]|>_|></; // incl. the picks-v4 eyes pair
|
||||
const RUNTIME_WORDS = /claude|codex|terminal|tty/i;
|
||||
|
||||
function explorerRowsFor(view: ReturnType<typeof createViewState>, s: FleetSnapshot) {
|
||||
@@ -86,12 +86,14 @@ describe("POSITIVE explorer-absence regression — claude/codex/terminal rows ca
|
||||
return stylizeLines(screen, createStyle("truecolor")).join("\n");
|
||||
};
|
||||
const claude = detail("alpha");
|
||||
expect(claude).toMatch(/▘/); // clawd outer-left eye quadrant
|
||||
expect(claude).toMatch(/38;2;24;24;24;48;2;173;103;85m[^\x1b]*>/); // left inward eye (picks v4)
|
||||
expect(claude).toMatch(/38;2;24;24;24;48;2;173;103;85m[^\x1b]*</); // right inward eye
|
||||
expect(claude).toContain(MARK_SGR.clawdEyeFg);
|
||||
expect(claude).toContain(MARK_SGR.clawdBodyBg);
|
||||
const codex = detail("beta");
|
||||
expect(stripAnsi(codex)).toContain(">_"); // codex ASCII prompt mark
|
||||
expect(codex).toContain(MARK_SGR.markInkFg);
|
||||
expect(codex).toContain(MARK_SGR.codexBlueFg); // picks-v4 chevron hint on detail
|
||||
const term = detail("gamma");
|
||||
expect(stripAnsi(term)).toContain(">_");
|
||||
expect(term).toContain(MARK_SGR.terminalCellBg);
|
||||
|
||||
@@ -195,7 +195,7 @@ describe("file-tree re-skin (Direction B navigator)", () => {
|
||||
const screen = renderScreen(s.get(), snap2, { cols: 150, rows: 40 });
|
||||
const styled = stylizeLines(screen, createStyle("truecolor"));
|
||||
const joined = styled.join("\n");
|
||||
expect(joined).toMatch(/38;2;24;24;24;48;2;173;103;85m▘▝/); // eyes-apart cells on the terracotta field (round-4 order)
|
||||
expect(joined).toMatch(/38;2;24;24;24;48;2;173;103;85m></); // picks-v4 inward squinty eyes on the terracotta field
|
||||
styled.forEach((line, j) => expect(stripAnsi(line), `line ${j}`).toBe(screen.lines[j]));
|
||||
});
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ describe("clawd grid = the RuntimeMark.tsx rect list", () => {
|
||||
|
||||
describe("row-scale mark family", () => {
|
||||
it("runtime → mark mapping: claude family = clawd cells, codex = >_, terminal = dark >_, unknown = honest ?", () => {
|
||||
expect(markText(runtimeMarkSegs("claude-code"))).toBe("▘▝"); // round-4 corrected square (minis stay downsample candidates)
|
||||
expect(markText(runtimeMarkSegs("claude-code"))).toBe("><"); // picks v4 amendment 14afeb74: inward squinty eyes (supersedes the round-4 quadrant pair)
|
||||
expect(markText(runtimeMarkSegs("codex"))).toBe(">_"); // the LOCKED web token
|
||||
expect(markText(runtimeMarkSegs("terminal"))).toBe(">_");
|
||||
expect(runtimeMarkSegs("terminal").every((s) => s.bg === "markBg")).toBe(true); // the dark-cell variant
|
||||
|
||||
@@ -95,7 +95,7 @@ describe("hatchet mainline in the SHIPPED content pane (frame-01 visual contract
|
||||
const body = screen.lines.join("\n");
|
||||
expect(body).toMatch(/┌─+┐/);
|
||||
expect(body).toContain("● lead"); // member-only title (S19 MR1)
|
||||
expect(body).toContain("▘▝ 18%"); // round-4 corrected square clawd mark + adjacent ctx
|
||||
expect(body).toContain(">< 18%"); // picks v4 (14afeb74): inward squinty eyes + adjacent ctx
|
||||
// straight connector runs + arrowhead; under the LOCKED containment an
|
||||
// edge may legitimately cross a pod-container wall (─ becomes ┼ at the
|
||||
// crossing) before its arrowhead
|
||||
@@ -539,34 +539,28 @@ describe("ROUND-3 LOCKED SET (orch locked-scope GO; pins 02259adb/29a10b62)", ()
|
||||
const s = makeStore(snap);
|
||||
s.dispatch({ type: "drill", resource: "pod", name: "dev", target: { host: "vm-host", rig: FIXTURE_RIG_NAME } });
|
||||
const pane = renderScreen(s.get(), snap, { cols: 150, rows: 40 }).lines.map((l) => l.slice(0, 30)).join("\n");
|
||||
expect(pane).not.toMatch(/▐▌|>_|▝▘|▘▝/); // no marks in the explorer (either quadrant order)
|
||||
expect(pane).not.toMatch(/▐▌|>_|▝▘|▘▝|></); // no marks in the explorer (quadrant orders AND the picks-v4 eyes)
|
||||
expect(pane).toMatch(/driver\s+24%/); // name-first untruncated + bare ctx%
|
||||
// cards still carry the mark
|
||||
s.dispatch({ type: "tab", tab: "graph" });
|
||||
const body = renderScreen(s.get(), snap, { cols: 150, rows: 40 }).lines.join("\n");
|
||||
expect(body).toMatch(/▘▝ 24%|▘▝ 63%/); // square clawd mark in card meta
|
||||
expect(body).toMatch(/>< 24%|>< 63%/); // picks-v4 clawd mark in card meta
|
||||
// detail page shows the mark as the runtime field — spelled runtime is dead
|
||||
s.dispatch({ type: "drill", resource: "agent", name: "dev.driver", target: { host: "vm-host", rig: FIXTURE_RIG_NAME, pod: "dev" } });
|
||||
const detail = renderScreen(s.get(), snap, { cols: 150, rows: 40 }).lines.join("\n");
|
||||
expect(detail).toMatch(/runtime:\s+▘▝/); // the mark IS the runtime value
|
||||
expect(detail).not.toMatch(/▘▝ claude-code/); // no spelled runtime beside the mark
|
||||
expect(detail).toMatch(/runtime:\s+></); // the mark IS the runtime value
|
||||
expect(detail).not.toMatch(/>< claude-code/); // no spelled runtime beside the mark
|
||||
});
|
||||
|
||||
it("the clawd row mark is the SQUARE with eyes clearly APART (round-4 quadrant-geometry correction)", async () => {
|
||||
it("the clawd eyes are the picks-v4 INWARD SQUINTY pair `><` (founder amendment 14afeb74, supersedes the round-4 quadrant geometry)", async () => {
|
||||
const { clawdSquareMark, runtimeMarkSegs, markText } = await import("../src/topology/runtime-marks.js");
|
||||
const sq = clawdSquareMark();
|
||||
expect(sq).toHaveLength(2); // 2 cells x 1 row ≈ square at cell aspect
|
||||
// GEOMETRY, not just the string (guard round-4 finding 1): the first cell's
|
||||
// eye occupies the OUTER-LEFT quadrant (U+2598 QUADRANT UPPER LEFT) and the
|
||||
// second cell's the OUTER-RIGHT (U+259D QUADRANT UPPER RIGHT) — the inner
|
||||
// half of BOTH cells is pure terracotta field, so the eyes sit clearly
|
||||
// APART around a real center gap (the ▝▘ order put both eyes at the center
|
||||
// seam — the rejected bunched form).
|
||||
expect(sq[0]!.text).toBe("▘"); // ▘ upper-LEFT quadrant — eye hugs the square's left edge
|
||||
expect(sq[1]!.text).toBe("▝"); // ▝ upper-RIGHT quadrant — eye hugs the right edge
|
||||
expect(markText(sq)).toBe("▘▝");
|
||||
expect(sq.every((g) => g.token === "clawdEye" && g.bg === "clawd")).toBe(true); // dark eyes ON the terracotta field
|
||||
expect(markText(runtimeMarkSegs("claude-code"))).toBe("▘▝"); // shipped claude mark = the square
|
||||
expect(sq).toHaveLength(2); // 2-cell form: literally the characters >< per the amendment
|
||||
expect(sq[0]!.text).toBe(">"); // left eye points INWARD
|
||||
expect(sq[1]!.text).toBe("<"); // right eye points INWARD — reads as a FACE
|
||||
expect(markText(sq)).toBe("><");
|
||||
expect(sq.every((g) => g.token === "clawdEye" && g.bg === "clawd")).toBe(true); // dark eyes ON the terracotta field (unchanged)
|
||||
expect(markText(runtimeMarkSegs("claude-code"))).toBe("><"); // shipped claude mark = the refined face
|
||||
});
|
||||
|
||||
it("agent-detail runtime marks keep their OWN styling in compiled output (guard round-4 finding 2)", () => {
|
||||
@@ -603,15 +597,19 @@ describe("ROUND-3 LOCKED SET (orch locked-scope GO; pins 02259adb/29a10b62)", ()
|
||||
};
|
||||
// clawd: dark #181818 eyes ON the #ad6755 terracotta field, in compiled SGR
|
||||
const cl = drillDetail("d.cl");
|
||||
expect(cl.styled).toMatch(/38;2;24;24;24;48;2;173;103;85m[^\x1b]*▘/);
|
||||
expect(cl.styled).toMatch(/38;2;24;24;24;48;2;173;103;85m[^\x1b]*>/);
|
||||
expect(cl.styled).toMatch(/38;2;24;24;24;48;2;173;103;85m[^\x1b]*</); // both inward eyes carry the eye-on-terracotta SGR
|
||||
expect(cl.plain).not.toMatch(/claude/); // spelled runtime is dead
|
||||
// terminal: the dark-cell background survives to the compiled detail line
|
||||
const tty = drillDetail("d.tty");
|
||||
expect(tty.styled).toMatch(/48;2;12;10;9m?[^\x1b]*>/);
|
||||
expect(tty.plain.slice(31)).not.toMatch(/terminal/);
|
||||
// codex: exactly ASCII >_ (no ❯, no enclosure pick), no spelled runtime
|
||||
// codex: ASCII >_ text with the picks-v4 CHEVRON-ONLY blue hint — the `>`
|
||||
// carries the OFFICIAL sampled #6867aa (38;2;104;103;170) on detail; the
|
||||
// `_` stays light ink; no ❯, no outline, no spelled runtime
|
||||
const cx = drillDetail("d.cx");
|
||||
expect(cx.plain.slice(31).trimEnd()).toMatch(/runtime:\s+>_$/);
|
||||
expect(cx.styled).toMatch(/38;2;104;103;170m[^\x1b]*>/); // chevron pick (picks v4 item a)
|
||||
expect(cx.plain).not.toMatch(/❯|codex/);
|
||||
});
|
||||
|
||||
|
||||
Reference in new issue
Block a user