From 8486fa1407804e0c229cb7de153b1846ea19a309 Mon Sep 17 00:00:00 2001 From: "prompt.ac/@jeffrey" Date: Sat, 3 Oct 2026 14:44:17 -0700 Subject: [PATCH] Record physical phone inspection and add read-only brain panel check --- apple/whistlegraph/Tests/build98-checks.json | 17 ++++++++--- .../UITests/HeaderSheetsTests.swift | 30 +++++++++++++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/apple/whistlegraph/Tests/build98-checks.json b/apple/whistlegraph/Tests/build98-checks.json index db65fd2b43..d182498cd5 100644 --- a/apple/whistlegraph/Tests/build98-checks.json +++ b/apple/whistlegraph/Tests/build98-checks.json @@ -2,13 +2,22 @@ "build": 98, "date": "2026-10-03", "deviceBuild": "Signed iOS build passed and installed on the paired iPhone.", - "javascriptTests": {"passed": 50, "command": "node --test apple/whistlegraph/Tests/*.test.mjs"}, - "browserTests": ["--native-shell --streaming", "--native-shell --streaming --jeffrey", "--native-shell --checked-edits", "--native-shell --checked-edits --repair-fails"], + "javascriptTests": { + "passed": 50, + "command": "node --test apple/whistlegraph/Tests/*.test.mjs" + }, + "browserTests": [ + "--native-shell --streaming", + "--native-shell --streaming --jeffrey", + "--native-shell --checked-edits", + "--native-shell --checked-edits --repair-fails" + ], "browserScope": "Mock inference and paint events verified streamed paint statements, incomplete-helper recovery, exact replacement previews, final review, verified-account model selection, persisted model settings, allowance display, single repair and rollback. No browser client errors in streaming checks.", "nativeLexer": "CodeSyntax.swift and CodeSyntaxCheck.swift compiled with swiftc; Unicode, comments, calls, numbers and unfinished strings passed.", "liveInference": "Authenticated OpenRouter-backed Opus 5 request returned HTTP 200, the requested model, OK, and end_turn with the demo token/thinking configuration. This small probe does not establish generated-art quality or latency.", "allowance": "Authenticated easel-credits endpoint returned valid daily and purchased balances. Daily billing limits were not changed.", "wwTenef": "The failed attempt stopped after four tool rounds and restored v0; reported glyph-cache messages were warnings. Later cloud state showed saved v1 before installation.", - "nativeUI": "Brain sheet and syntax colors compiled but were not visually exercised on the locked physical phone. Header XCTest navigation was updated but not run.", - "remoteAgents": "No remote Claude/Codex subscription bridge was connected. This build uses hosted inference." + "nativeUI": "Launched build 98 on the unlocked physical iPhone and visually inspected a devicectl screenshot: wwTenef v1 paints, the brain button is at the lower right below the preview, and the piece header remains intact. XCTest could not enable UI automation (60-second timeout), so open-menu and native streaming checks remain unverified.", + "remoteAgents": "No remote Claude/Codex subscription bridge was connected. This build uses hosted inference.", + "nativeScreenshot": "Tests/screenshots/build98-phone-workspace.png" } diff --git a/apple/whistlegraph/UITests/HeaderSheetsTests.swift b/apple/whistlegraph/UITests/HeaderSheetsTests.swift index a280a52481..ff41e7df55 100644 --- a/apple/whistlegraph/UITests/HeaderSheetsTests.swift +++ b/apple/whistlegraph/UITests/HeaderSheetsTests.swift @@ -17,6 +17,36 @@ final class HeaderSheetsTests: XCTestCase { return app } + // Read-only inspection of the installed phone account and its current piece. + func testPhoneBrainPanelAndPieceMenu() { + let app = XCUIApplication() + app.launch() + let brain = app.buttons["brain-settings"] + XCTAssertTrue(brain.waitForExistence(timeout: 30)) + func capture(_ name: String) { + let image = XCTAttachment(screenshot: app.screenshot()) + image.name = name; image.lifetime = .keepAlways; add(image) + } + capture("Build 98 phone workspace") + brain.tap() + XCTAssertTrue(app.segmentedControls["brain-pixel-size"].waitForExistence(timeout: 10)) + XCTAssertTrue(app.staticTexts["OpenRouter"].waitForExistence(timeout: 15)) + capture("Build 98 phone Brain settings") + // Expand the sheet to inspect the allowance and request usage below it. + app.swipeUp() + XCTAssertTrue(app.descendants(matching: .any).matching(identifier: "brain-balance").firstMatch.waitForExistence(timeout: 15), app.debugDescription) + capture("Build 98 phone braincells and usage") + app.buttons["Done"].tap() + XCTAssertTrue(waitForDisappearance(of: app.segmentedControls["brain-pixel-size"])) + app.buttons["workspace-settings"].tap() + XCTAssertTrue(app.buttons["pieces-new"].waitForExistence(timeout: 10)) + XCTAssertTrue(app.staticTexts["OpenRouter"].exists) + XCTAssertFalse(app.segmentedControls["brain-pixel-size"].exists) + capture("Build 98 phone piece menu") + app.buttons["Done"].tap() + XCTAssertTrue(waitForDisappearance(of: app.buttons["pieces-new"])) + } + func testPieceCodeOpensPiecesSheetWithNewPiece() { let app = launch() let code = app.buttons["workspace-settings"] -- 2.51.2