havre smoke: the harbor's first row is "+ new character"
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BQqGFv54JJTw7p3rgGjP7C
This commit is contained in:
1 parent
44a91eb69b
commit
4a0f40ce99
1 file changed
+8
-7
@@ -325,7 +325,7 @@ async function main() {
|
||||
assert.match(await textOf(page, "#who-name"), /^chat$/i);
|
||||
await has(page, "#log .line.note .said", /paste your venice key/);
|
||||
assert.ok(await page.locator("#cast-box").isHidden(), "the harbor's own aren't listed");
|
||||
assert.equal(await page.locator("#harbor-empty").evaluate((e) => e.hidden), false, "the empty harbor says so");
|
||||
assert.equal(await page.locator("#roster tr.newrow").count(), 1, "the harbor always has a row for someone new");
|
||||
assert.equal(await page.locator("#card-empty").evaluate((e) => e.hidden), false, "so does the empty card");
|
||||
assert.ok(await page.locator("#card").isHidden(), "the card lives in the harbor tab, not under the characters");
|
||||
assert.ok(await page.locator("#say").isDisabled(), "nobody to talk to yet");
|
||||
@@ -334,13 +334,14 @@ async function main() {
|
||||
await page.click("#lt-harbor");
|
||||
assert.ok(await page.locator("#card-new").isVisible(), "an empty harbor opens on a new character to write");
|
||||
assert.match(await textOf(page, "#card-h"), /^NEW CHARACTER$/);
|
||||
assert.match(await textOf(page, "#roster tr.newrow"), /\+ new character/);
|
||||
await page.click("#lt-chars");
|
||||
await shot(page, "desktop.png");
|
||||
|
||||
// a card comes in through the import dialog, and talks from its own examples without a key
|
||||
await page.click("#import");
|
||||
await page.setInputFiles("#file", { name: "ro.json", mimeType: "application/json", buffer: Buffer.from(JSON.stringify(v2)) });
|
||||
await count(page, "#roster tr", 1);
|
||||
await count(page, "#roster tr:not(.newrow)", 1);
|
||||
await has(page, "#who-name", /^Captain Ro$/);
|
||||
await has(page, "#log .line.them .said", /We're closed\. Mostly\./);
|
||||
await has(page, "#roster td", /Ported from Captain Ro by someone/);
|
||||
@@ -420,7 +421,7 @@ async function main() {
|
||||
assert.equal(hello.messages[0].role, "system");
|
||||
assert.match(hello.messages[0].content, /you can send photos of yourself/);
|
||||
assert.equal(hello.messages[1].role, "user");
|
||||
await count(page, "#roster tr", 2);
|
||||
await count(page, "#roster tr:not(.newrow)", 2);
|
||||
assert.match(await page.locator('#vgrid .tile[aria-pressed="true"]').evaluate((el) => el.textContent), /Sable Penrose.*talking now/);
|
||||
// the model: their own on Venice to start with, and any other Venice model from the picker
|
||||
await has(page, "#model-btn", /^GLM 5\.2$/);
|
||||
@@ -794,7 +795,7 @@ async function main() {
|
||||
await shot(page, "desktop-remix.png");
|
||||
await page.locator("#rx-draft button", { hasText: "KEEP IN HARBOR" }).click();
|
||||
await has(page, "#who-name", /^Ines Corbel$/);
|
||||
await count(page, "#roster tr", 4);
|
||||
await count(page, "#roster tr:not(.newrow)", 4);
|
||||
await has(page, "#log .line.them .said", /Where are you headed\?/);
|
||||
assert.equal(await page.locator("#studio.pane-chat").count(), 1, "a kept remix opens their chat, to say hello");
|
||||
assert.ok(await page.locator("#chat-back").isHidden(), "a wide screen shows the list and the chat side by side, so no way back is needed");
|
||||
@@ -1060,7 +1061,7 @@ async function main() {
|
||||
await page.click("#lt-chars");
|
||||
await page.click("#import");
|
||||
await page.setInputFiles("#file", png);
|
||||
await count(page, "#roster tr", 5);
|
||||
await count(page, "#roster tr:not(.newrow)", 5);
|
||||
|
||||
// the security policy: nothing but api.venice.ai (and its private-share links for clips)
|
||||
assert.equal(await page.evaluate(() => fetch("https://example.com/").then(() => "reached", () => "blocked")), "blocked");
|
||||
@@ -1131,7 +1132,7 @@ async function main() {
|
||||
taskmaster: [{ role: "user", content: "Plan my week" }, { role: "assistant", content: "Monday first." }] }));
|
||||
});
|
||||
await p2.reload();
|
||||
await count(p2, "#roster tr", 1);
|
||||
await count(p2, "#roster tr:not(.newrow)", 1);
|
||||
const left = await p2.evaluate(() => {
|
||||
const threads = JSON.parse(localStorage.getItem("havre.threads.v1") || "{}"), t = Object.values(threads)[0];
|
||||
return { cards: JSON.parse(localStorage.getItem("havre.cards.v1")), seeded: localStorage.getItem("havre.seeded.v1"),
|
||||
@@ -1179,7 +1180,7 @@ async function main() {
|
||||
await has(p5, "#cast .tile[data-cast=maren] .go", /^talk again$/);
|
||||
await p5.goto(base + "?meet=maren");
|
||||
await has(p5, "#who-name", /^Maren$/);
|
||||
await count(p5, "#roster tr", 2);
|
||||
await count(p5, "#roster tr:not(.newrow)", 2);
|
||||
assert.ok(await p5.locator("#log .line.me .said", { hasText: "What is this place?" }).isVisible(), "the same chat, not a new copy of her");
|
||||
await own.close();
|
||||
|
||||
|
||||
Reference in new issue
Block a user