Login
Timeline
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

50 most recent check-ins

2026-11-11
06:26
Merge stop-coasting: stop the list coasting before the jump to bottom. Fix for a bug the maintainer reported and whose first fix failed their hand check (stone forum 915dbe3627, which says a reported bug's fix needs no go). One change, one build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Leaf check-in: b85e5d4b47 user: x86-1-stone tags: trunk
06:26
Stone: stop the list coasting before the jump to bottom Maintainer, build 77 (stone forum 915dbe3627): "still doesn't scroll to the bottom when the button is clicked while the text is still scrolling." Jumping without animation (08cb04f7c3) didn't help: the coasting carries on past a jump. The button now turns scrolling off (scrollDisabled), which stops the coasting, then 50 ms later jumps and turns scrolling back on. The wait lets the screen draw once with scrolling off. Likely cause, not proven: no Swift on these hosts, so not type-checked or run; Xcode Cloud is the first compile, and the hand check is the proof. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Leaf check-in: b773f2a6e6 user: x86-1-stone tags: stop-coasting
2026-11-10
21:33
Merge jump-while-scrolling: jump to bottom works while the list is still scrolling. A fix for a bug the maintainer reported (stone forum 8f739ea070, a3ddb2dd50), one change, one build. Merged without a separate go: the maintainer asked of a verified fix parked for their go, "why is something like that waiting on my go?" (ocx-console forum 6be9cb0285; scope relayed on stone forum ceef89c6fd). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co check-in: 08cb04f7c3 user: x86-1-stone tags: trunk
21:32
Stone: jump to bottom works while the list is still scrolling Maintainer (stone forum a3ddb2dd50): "the arrow appears, but it doesn't cause any scrolling to click it ... i think it just doesn't when the text is in the middle of scrolling." The likely cause: the tap ran an animated scrollTo while the scroll view still coasted after a flick, and the coasting won. The button now jumps without animation, which stops the coasting, and jumps once more on the next turn of the main loop. Likely cause, not proven: no Swift on these hosts, so not type-checked or run; Xcode Cloud is the first compile, and the hand check is the proof. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Leaf check-in: 4e6ee59303 user: x86-1-stone tags: jump-while-scrolling
20:52
README: what Stone is for, what it is made of, how it is shaped, what success looks like, and the four virtues. Purpose as the maintainer confirmed it on the Big Picture page (stone forum cfcd8ddfb6), Chronicle included, checked against the code: Chronicle is design only; the app reads no sensors yet. Two cold reads by fresh sessions; fixed each guessed word and both hardest sentences. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co check-in: 201a83dce5 user: x86-1-stone tags: trunk
2026-11-06
17:21
Merge safari-button: compass button opens the page in Safari. Maintainer approved on ocx-console card 0d07e65426, relayed on stone forum 8b131dcf83: signed-in-links, then safari-button, one build each. signed-in-links built at 4e5b1e7972. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co check-in: 93a9017674 user: x86-1-stone tags: trunk
17:11
Merge signed-in-links: links in conversations open signed in. Maintainer approved on ocx-console card 0d07e65426 ("not exactly what i meant, but sure."), relayed on stone forum 8b131dcf83: signed-in-links, then safari-button, one build each. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co check-in: 4e5b1e7972 user: x86-1-stone tags: trunk
04:45
Stone: an Open in Safari button on Remote Site and signed-in pages Maintainer (ocx-console forum 58613c1556): "stone doesn't give me a way to select opening in a browser". The long-press Open in Browser (build 1cf09bb79b) is easy to miss, so a Safari button at the top of Remote Site, and of a page opened signed in from a conversation, opens the page showing now in Safari. Built on signed-in-links, so merge that first. Not type-checked here (no Swift on these hosts); Xcode Cloud is the first compile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Leaf check-in: d29ce66973 user: x86-1-stone tags: safari-button
04:45
Stone: links to a repository's server open signed in Maintainer (ocx-console forum 649a29854b): "the stone app tries to load the page without a login cookie and the url changes." A conversation's link opened in Safari's view, which has no Fossil login, so the console sent it to /login. A link whose address starts with one of the phone's repositories' servers now opens in a web view signed in as that repo's remote user, the way Remote Site does. Other links open as before. Not type-checked here (no Swift on these hosts); Xcode Cloud is the first compile. New unit tests: SignedInLinkTests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Leaf check-in: 0619358120 user: x86-1-stone tags: signed-in-links
01:59
Merge update-button for a build Maintainer, via Stone's question card: "Yes, merge it for a build" (ocx-console forum 34693c2b7e). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co check-in: 64714a1560 user: x86-1-stone tags: trunk
01:29
Stone: ask a session for an update in one press Maintainer (ocx-console forum 02c912ba6c): "i feel asking for an update should be a single button." A session conversation that hasn't ended gets a button at the top right that posts a plain update request as a reply to the latest post, leaving any draft as it is. Not type-checked here (no Swift on these hosts); Xcode Cloud is the first compile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Leaf check-in: ec0a06293b user: x86-1-stone tags: update-button
2026-11-05
22:32
Merge open-in-browser for a build Maintainer, via Stone's question card: "Yes, merge it for a build" (ocx-console forum e06abc7178). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co check-in: face9dfacd user: x86-1-stone tags: trunk
22:24
Stone: Open in Browser on a long press of a link to another site Maintainer, Verify of build 4ff57bc6dca4: "it must be a quick tap, because it isn't in the long tap options. Opening in an external browser would be nice." One small step, as they asked ("i was looking for baby steps"). Not type-checked here (no Swift on these hosts); Xcode Cloud is the first compile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Leaf check-in: b0abd172f0 user: x86-1-stone tags: open-in-browser
21:00
Merge inline-steps for a build Maintainer, "1" (ocx-console forum 35cab6bec4; stone forum 1cba4d7971). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co check-in: 51e10945e4 user: x86-1-stone tags: trunk, audited
20:50
Stone: steps in line per turn, running/idle in the list, jump to bottom Maintainer (ocx-console forum 57bc09a092; stone forum b01f61f204): "next round should add a jump to bottom link like console. not sure what happened to getting in-line with steps and activity checks." - Steps were heard only live, with Automatic Sync on, and kept 10 minutes, so they seldom showed. SessionSteps now reads the repo's last 300 chat lines from the server when a session's thread opens and on each of its syncs, merges them with live lines by msgid, and keeps them. - Each turn's steps show under the post that started it: the current turn open (newest 6, the rest on a tap), past turns folded to "N steps". - The conversation list marks each session thread Running, Idle (your turn), Not started or Ended, read as the title line is. - A round down-arrow at the bottom right while scrolled up. Not type-checked here (no Swift on these hosts); Xcode Cloud is the first compile. New unit test: testStepsMergeByIDAndSplitByTurn. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Leaf check-in: bb328f6e2f user: x86-1-stone tags: inline-steps
20:46
Merge new-tab-links, main-menu and offline for a build Maintainer, "1" (ocx-console forum d0e838f7d2; stone forum 20726297d0): yes, all three. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co check-in: 7bcd4112eb user: x86-1-stone tags: trunk, audited
20:44
Stone: say Offline plainly and sync when the network returns Maintainer, on a plane: "Stone acted like it was synching while the wifi wasn't active" (ocx-console forum 653b82196c; stone forum 9c18f091d0). NetworkStatus watches the system's network path. With none, no sync starts (RepoStore.sync throws .offline and records nothing; syncAll returns), so no spinner shows; the Sync buttons and a conversation's title say Offline. A reply sent offline says it goes out when the network returns, and ForegroundSync runs a Sync All each time the path comes back. Not type-checked here (no Swift on these hosts); Xcode Cloud is the first compile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Leaf check-in: 80f0431959 user: x86-1-stone tags: offline
17:59
Web views: links meant for a new tab open in place The maintainer (ocx-console forum afe440cb03, Nov 5, 12:58 pm): "stone still offers unclickable links, so i will open in a browser". ocx-console's page sets target=_blank on every link (its page.html), and a WKWebView with no UI delegate drops a tap on such a link. Neither the remote site view nor the local repository view had one, so no build ever opened them. Not the conversation view's links (conversation-links, in build 924e99f9f95b), which open through openURL. NewTabsInPlace, the uiDelegate of both, loads such a link in the same web view: the login cookie holds and a swipe goes back. The bundled console page (ConsolePage) is left as it is: a remote page there would replace it. Not checked: no Swift toolchain on x86-1; not run on the phone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Leaf check-in: c3b528e7d3 user: x86-1-stone tags: new-tab-links
17:26
Merge conversation-links and session-status into trunk, for a build The maintainer, 2026-11-05 (ocx-console forum 55f84c4d8e, answering 39262becef, "May Stone's session merge its fixes to trunk, so Xcode Cloud builds one for your phone?"): "1", yes. Relayed by run-194d2a3d (stone forum 4ea178c8fa's thread). conversation-links: links in a conversation open; Select Text in the bubble's menu. session-status: a session's status, turns and steps from protocol 2, and OCX's questions and decisions as written now. One conflict, the bubble's Text line, kept both changes. Not checked: no Swift toolchain on x86-1; this build is the first type-check. main-menu is not merged: not named in the question. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co check-in: 4baea2d1c8 user: x86-1-stone tags: trunk
17:24
Conversations: OCX's questions and decisions as protocol 2 writes them The maintainer (ocx-console forum 0c36d54cf0, Nov 5), reading a question in Stone: "stone uses an older format. maybe update stone?" ocx2 post --for --options now writes words for people and then a question message ({"ocx":2,"to":LOGIN,"question":{question, options, stakes}}); Stone looked for Question: and Options: headings, so it offered no choices and showed the raw JSON. OCXMessage (its own file now) reads a post that is a fenced OCX block, or ends in one, in either protocol: run, started, ended, stop, question, decision (a protocol 1 response too). A bubble shows the post's words without the block, or a line for a block alone ("The session started."). A question's options are buttons, the first marked recommended, until a decision is in the thread. A reply to a question is written as a decision in the question's own shape ({"ocx":2,"re":QUESTION,"decision":{note}}), the note an option's words exactly or your own, with a Decision: line before it; the reply box says Your decision. A question to your login counts as a conversation you take part in. Checked: the question shape against ocx-console post 7186524c37 and the decision against f582fd0ca7, by reading them. Not checked: no Swift toolchain on x86-1, so not type-checked and the tests not run; not run on the phone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Leaf check-in: 7c03e35d00 user: x86-1-stone tags: session-status
17:11
Conversations: a session's status and steps from protocol 2 The maintainer (ocx-console forum d77471efb6, Nov 5): Stone's conversations view hasn't shown a session's turns or busy/idle status since the protocol change, and should show its steps. The status came from GET ext/ocx/status, which went with the old daemon (it now answers Not Found), and the steps from "[run HASH10]" chat lines that protocol 2 doesn't write. AgentStatus is now read from the thread itself: its first post is the run, and the node it was sent to answers with started and ended. Waiting to start; working (the latest post isn't the session's); your turn (the session posted last); or ended, with its outcome. Both protocols' shapes. A started or ended counts only from the run's node; not confirmed by receipts. The session's login comes from started (process_user). Steps are the session's lines in the repository's chat (ocx-console's tools/steps hook), kept per repository and sender (SessionSteps) as RemoteWake hears them, and shown under the latest post while the session works, the newest six. AgentStatusClient and docs/ocx-status-endpoint.md are removed. Checked: the model against a real protocol 2 session thread on ocx-console (c5100a1b6a: run by ec2-user, started by x86-1, then run-194d2a3d's posts) and this run's protocol 1 thread. Not checked: no Swift toolchain on x86-1, so not type-checked and the new tests (AgentStatusTests) not run; not run on the phone. Steps need Automatic Sync on and a saved password, as the wake does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co check-in: 10973a7c07 user: x86-1-stone tags: session-status
13:50
Each repository's pages show its own main menu Fossil's style_get_mainmenu() kept the menu in a function-local static, read once per process. The app serves every page from one process, so the first page drawn set the menu for all later pages in every repository, and a changed menu never showed (stone, forum 405152d5b2). The in-process patch moves it to a file-scope static that style_reset_state() clears. scripts/linux-mainmenu-driver.c serves two repositories with different menus in turn, then the first after its menu changes; it fails without the patch and passes with it, and linux-crosslink-test.sh runs it. Same change as menu-per-repo, taken onto trunk; that branch grew from conversation-links by mistake. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Leaf check-in: 2cccc1876c user: x86-1-stone tags: main-menu
13:49
Each repository's pages show its own main menu Fossil's style_get_mainmenu() kept the menu in a function-local static, read once per process. The app serves every page from one process, so the first page drawn set the menu for all later pages in every repository, and a changed menu never showed (stone, forum 405152d5b2). The in-process patch moves it to a file-scope static that style_reset_state() clears. scripts/linux-mainmenu-driver.c serves two repositories with different menus in turn, then the first after its menu changes; it fails without the patch and passes with it, and linux-crosslink-test.sh runs it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Closed-Leaf check-in: 19ccefce59 user: x86-1-stone tags: menu-per-repo
06:10
Conversations: links in a bubble didn't open when tapped (stone, forum 82fbe873c7, Nov 4: "clicking links in the conversation view doesn't work"). The likely cause: the bubble's Text had .textSelection(.enabled), and a selectable Text on iOS takes the tap, so the OpenURLAction that opens links in the in-app browser never ran. The links in that thread are full https URLs, which that action handles, so it isn't a relative link. The bubble is no longer selectable; a new Select Text item in its context menu, beside Copy, opens the whole post in the existing selectable sheet (LongTextView). Checked: nothing; no Swift toolchain on x86-1 now, so not type-checked, and not run. Not checked: the phone. Not merged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Leaf check-in: 1164ee8148 user: x86-1-stone tags: conversation-links
2026-11-03
03:36
Merge card-lock-wait into trunk, for a build (maintainer, Nov 2: "i think so. Why not?"). Cards wait out a sync's write, and their read errors stay out of its output. Checked on x86-1 before the merge: scripts/linux-crosslink-test.sh exit 0 on 4 runs, 0 failed card reads, 0 writes with a read's error. No Swift changed. Not checked: the iOS build, unit tests, the phone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co check-in: 35a54c2dd1 user: x86-1-stone tags: trunk, audited
03:32
Cards wait out a sync's write, and their read errors stay out of its output (the follow-up left open by the merge at cdf1194876). stone_fossil_card now mutes Fossil's logger for its thread, as stone_fossil_query does, and each repository's read-only connection waits up to STONE_QUERY_BUSY_MS for the lock. A failed column read (a locked file) now fails the card instead of reading as no items; a missing table still gives none. scripts/linux-query-lock-driver.c also asks a card on each read, which must find the one check-in tagged card-probe every time. Checked on x86-1: scripts/linux-crosslink-test.sh exit 0 on 4 runs, 0 failed card reads and 0 writes with a read's error; without the StoneFossil.c change, 243 of 415 card reads failed and 100 of 413 writes held a read's SQLITE_BUSY. The 7 cards still match OCX's examples, before and after a rebuild. No Swift changed. Not checked: the iOS build, unit tests, the phone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMRbozgWJPkxNUF9co Leaf check-in: a1081e213b user: x86-1-stone tags: card-lock-wait
02:05
Merge console-cards into trunk, for a build (maintainer, Nov 2: "push to trunk so we can get a build?", both branches). The console's cards, answered as OCX's shared examples expect and naming each card's project. Conflicts in ios/FossilBridge/StoneFossil.c and scripts/linux-crosslink-test.sh resolved by keeping both sides: query-lock-wait's stone_fossil_query and query-lock test, then console-cards' stone_fossil_card and cards test. Checked on x86-1 after the merge: scripts/linux-crosslink-test.sh exit 0, with 7 cards matching OCX's examples before and after a rebuild, and reads waiting out a write with no read's error in the writer's output; all 31 Swift files type-check against the iPhoneOS 26.5 SDK with no errors, and only TicketOpener's old warning. Not checked: the full iOS build, unit tests, the phone. Still open: stone_fossil_card's own connections have neither the busy timeout nor the muted log. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KN8kpVSS9HrK1wU8iJ check-in: cdf1194876 user: x86-1-stone tags: trunk
02:02
Merge query-lock-wait into trunk, for a build (maintainer, Nov 2: "push to trunk so we can get a build?", both branches). A read waits for a sync's lock, and a read's errors stay out of the sync's output, so a sync is no longer shown as failed (forum b15c972dba). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KN8kpVSS9HrK1wU8iJ check-in: b0347aba5e user: x86-1-stone tags: trunk
2026-11-02
05:45
Sync wrongly shown as failed: a read's lock error went into the sync's output (stone, forum b15c972dba, screenshots at 12:33 AM Eastern, Nov 2: 'SQLITE_BUSY(5): database is locked in "PRAGMA table_info(ticketchng)"', 'SQL: COMMIT'). stone_fossil_query opened its read with no busy timeout, so a read landing in a sync's COMMIT failed at once. SQLite's log callback is process-wide, and Fossil's logger put that error, with the sync's COMMIT, into the sync's output, where RepoStore.detectLocalSQLiteFailure read it as a failed sync. The failed read also read as "nothing here", and the logger ran on the reader's thread against the sync's statements and output. Now a read waits up to 2 s for the lock, and a thread-local stoneLogMuted (fossil-inprocess.patch, src/main.c) keeps a read's errors out of Fossil's logger; they still reach the caller as -1. gen-fossil-sources.sh applies the patch with git apply under BusyBox, whose patch refuses it (the same change as on console-cards). New scripts/linux-query-lock-driver.c: 4 readers alongside Fossil writing; fails on any failed write, SQLITE_ error in a write's output, or failed read. Checked, on x86-1, from a fresh Fossil tree: before the fix, one writer and 4 readers for 20 s gave 2,583 writes all succeeding (2,583 tags in the repository), 2,548 with the phone's exact text in their output, and 38,435 of 88,445 reads failed; with no readers, none of 3,232. After it: scripts/linux-crosslink-test.sh exit 0; 4 runs of 15 s, 8,829 writes and 164,070 reads, no failures and no SQLITE_ text; query-stress-test 17 runs and 351,819 queries with no failure, where 2 of 17 runs had one before. StoneFossil.c and the patched main_.c parse for arm64-apple-ios17.0 against the iOS 26.5 SDK. No Swift or header changed, so the Swift type-check wasn't rerun. Not checked: the phone, the full iOS build, unit tests. Not done: stone_fossil_card on console-cards opens its own connections and needs the same two changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KN8kpVSS9HrK1wU8iJ Leaf check-in: e1832d542b user: x86-1-stone tags: query-lock-wait
05:39
Create new branch named "query-lock-wait" check-in: 67d56c75b8 user: x86-1-stone tags: query-lock-wait
04:14
Card examples: copy OCX's again from ollama trunk (read Nov 1, 11:14 PM Eastern), and answer with the card's project, as OCX's card tool does since cards came from every repository. Expected answers are now PROJECT.NAME.json, each with a top-level project; card/active exists in both Alpha and Beta with different definitions. stone_fossil_card takes a project, the project-name of the clone holding the page, and echoes it; FossilQuery.card and ConsoleBridge's card pass home.project. linux-cards-driver.c reads each definition from the repository whose project-name is PROJECT, not always a.fossil. gen-fossil-sources.sh: on BusyBox, whose patch refuses fossil-inprocess.patch and leaves a half-patched tree, apply it with git apply. Checked, on x86-1 (BusyBox, musl): from a fresh Fossil tree, scripts/linux-crosslink-test.sh exit 0, 7 cards match before and after fossil rebuild, both refusals hold. Not checked: type-check (no Swift or iOS SDK on this machine), so the two Swift edits are uncompiled; the phone. Known and not from this change: query-stress-test reported 1 failed query in 2 of 16 five-second runs here, about 20,000 queries each; cause not found. No merge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KN8kpVSS9HrK1wU8iJ Leaf check-in: 640f8e7706 user: x86-1-stone tags: console-cards
2026-10-31
22:24
linux-swift-check.sh: a full iOS type-check from a Linux toolchain. Its resource directory holds Linux modules, CoreFoundation among them, which shadow the SDK's, so Foundation's headers never saw '@class NSError' and failed to import; the script now gives Swift a resource directory with only shims, clang and apinotes, adds the shims to the import path, and turns on cross-import overlays (PhotosPicker comes through PhotosUI's SwiftUI overlay), which only a Darwin host enables by default. Used only when the toolchain has a linux/ resource subdirectory. Checked with Swift 6.3.3 (amazonlinux2, under proot on this node) and iPhoneOS26.5.sdk: all of ios/Stone on branch console-cards type-checks with no errors and one warning, TicketOpener's old one (opus-stone's baseline, 2026-10-27); a file assigning a String to an Int fails. Not covered: StoneTests, since XCTest isn't in the SDK. check-in: 7171e5ef9b user: stone-session tags: console-cards
19:34
linux-swift-check.sh: read swiftc's version with sed, not head, and without stderr. With pipefail, head closing the pipe early failed the script, and a toolchain that prints a libc warning first (Swift 6.1.2 for amazonlinux2, run under proot on this Alpine node) put the warning where the version goes. Checked: the script now passes in parse-only mode on all 31 Swift files, the console branch's included; a file with a syntax error fails swiftc -parse. check-in: a9898dd9b9 user: stone-session tags: console-cards
12:22
Conversations: a run's progress, live from the server's chat (stone, forum 51afa94af8: '2 sounds good'; format from ocx2, 2026-10-31). While a run works, the node posts the newest line of the run's progress file to its repository's Fossil chat as '[run HASH10] TEXT', at most every 2 s. RemoteWake's /chat-poll now asks for raw text; ChatPollAnswer picks out those rows (RunProgressLine.parse), and they no longer count as news to sync for, so a working run doesn't force a sync every 30 s. RunProgress keeps each run's newest line, and ConversationView's line under the reply box shows 'Working: TEXT' when the newest fresh line (under 10 minutes old) is from a run whose post is in the thread and is newer than the thread's last post, which ends a turn. Chat isn't synced, so lines are seen only while the app follows the repository (Automatic Sync on) and the phone's login has C there. On branch console-cards with the console, for one build. RunProgressLineTests cover parsing, refusals and the wake count. Checked: nothing here compiles Swift. Not checked: type-check, tests, the phone; no node posts these lines yet. check-in: 45993951ce user: stone-session tags: console-cards
11:52
Console page: Stone's own, in the app bundle (ios/Stone/Console), started from OCX's page (ollama tech-note e459e9b7bc, artifact aa7b17fd1b, sha3 checked; maintainer, ollama forum cbfdcba379: 'the console contract should be just that from OCX, not the code. The presentation code belongs in Stone.'). Changed from OCX's: tool() has only Stone's transport (postMessage with reply, never rejecting; outside Stone it answers stopped); a card is named by project and name (#topic=PROJECT/NAME, and card input carries project and for); title Console. ConsoleBridge's cards answer gains as_of, the newest of its cards', which the greeting shows. Checked: node --check console.js; the page loads nothing but its own console.css and console.js, with no inline script. Not checked: type-check, build, the phone. check-in: 956e9912b0 user: stone-session tags: console-cards
11:51
Console: Stone's own page, shipped in the app, with cards from every project (maintainer, ollama forum d4b4110a04: 'If it is Stone's console, it should be part of Stone.'; 5cff8e6bb4: 'if any project can provide cards, that seems fine, but if ollama is special, it would need a different relationship in Stone'). ConsoleView now loads Console/index.html from the app bundle (loadFileURL) in its own ConsolePage web view, needing no loopback server; RepoWebView and RepoDetailView are back as on trunk. ConsoleBridge answers only pages of the bundle's Console folder. Any clone's card/NAME pages count: cards lists every clone's, with its project; card takes name and optional project and reads the definition from that clone, answering across every clone; $viewer defaults to the login on that clone's remote. open {project, hash} pushes that clone's /info/HASH. StoneApp opens the console at launch once any clone has a card page; the repo list's Console button is always there. project.pbxproj and project.yml gain a folder reference, Stone/Console, copied as a resource. The folder's files (copied from OCX's page) come next; until then this branch doesn't build. Checked: project.pbxproj braces and parentheses balance. Not checked: type-check, build, the phone. check-in: aaa271787e user: stone-session tags: console-cards
11:36
Console, slice 2: Stone shows the console page the web and Stone share (ollama www/console/, ollama wiki 'Console plan', 'One page for the web and Stone') as its top-level greeting, and answers its tool() calls from the C bridge (ocx2, 2026-10-31: 'in Stone it should be the top-level greeting, the first thing on opening the app'). ConsoleBridge, a WKScriptMessageHandlerWithReply named 'ocx', takes {tool, input} only from the loopback main frame under /doc/*/www/console/ and resolves to a JSON string or {"stopped": WHY}, never rejecting: card reads card/NAME from the console's clone (wiki export) and answers it with stone_fossil_card over every clone on the phone; cards loops card over the card/ pages; open {project, hash} pushes that clone's /info/HASH. for defaults to the login on the console clone's remote, now to the clock. ConsoleView (AppRoute.console) shows the page in its own web view from the clone holding www/console/index.html and card/ pages, at /doc/trunk/..., else /doc/agent-tools/...; since the loopback server serves one clone at a time, it points the server back at that clone each time it appears. At launch it opens over the repo list when such a clone exists; the repo list gains a Console button. RepoDetailView also passes its own ConsoleBridge, so the page works when browsed to inside the clone. New code is in existing files, since the Xcode project file is checked in. Checked: nothing here compiles Swift; the bridge it calls passes OCX's six examples on Linux (scripts/linux-crosslink-test.sh). Not checked: type-check, the page (not landed yet), the phone. check-in: daf343056d user: stone-session tags: console-cards
00:50
Card examples: copy OCX's again from ollama d1fe484f2d, which adds fieldless: a card naming a field its kind lacks (due, on forum posts) answers zero items and say_none, as a missing column does. stone_fossil_card already did. Checked: scripts/linux-crosslink-test.sh exit 0; all six cards answer as expected, before and after fossil rebuild. check-in: 3b8de3c580 user: stone-session tags: console-cards
00:31
Card examples: copy OCX's again from ollama 14f6af3b8e, which adds the recent card that 973aca3f4c left out (limit 1, count 2, one item: count is every match before the limit). Checked: scripts/linux-crosslink-test.sh exit 0; all five cards answer as expected, before and after fossil rebuild. check-in: 3010bcc074 user: stone-session tags: console-cards
00:29
Console cards, slice 1: stone_fossil_card answers a card/NAME definition across the phone's clones, as OCX's card tool does (stone wiki 'Console plan'; ollama 'Console plan', 'Agreed with Stone'; OCX's cards at ollama 973aca3f4c). It lives in the C bridge so Linux can test it: one read-only connection per repository, as stone_fossil_query, and SQLite's own JSON functions for the definition and the answer. Its queries follow OCX's src/ocx/fossil/cards.cr: four finds (posts_tagged with value and unanswered_by, checkins_tagged, tickets, threads_active_within); a missing table or column gives zero items; tags are matched by stored name; count is before the limit; as_of is the newest ci, f or t event; say substitutes {count}, {titles} joined by '; ' and {FIELD} of the first item, with say_none. A definition without exactly one find, or with a key missing or of the wrong type, is refused (-2). scripts/card-examples copies OCX's shared examples (973aca3f4c, without its schema files). scripts/linux-cards-driver.c reads each card/NAME through the embedded Fossil's wiki export, answers it from every built .fossil for login stone at now.txt, and compares the parsed JSON (json_tree) with expected/NAME.json; linux-crosslink-test.sh builds the examples with the generated Fossil 2.26 and checks them before and after fossil rebuild. Checked: scripts/linux-crosslink-test.sh exit 0, all four cards match before and after rebuild, both refusals hold, and the other drivers still pass; a changed expected count and order were both reported as differences; clang -Wall -Wextra shows no warnings in the new code; crystal run ci.cr exit 0 (no iOS SDK here). Not checked: the iOS build. No Swift calls it yet; that is slice 2. On a branch so that it starts no build until the screen joins it. check-in: 1405df36f9 user: stone-session tags: console-cards
2026-10-29
22:31
Verify This Build: the three follow-ups opus-stone left for run-af0dbe70 (forum e320232451, posts 1e43c5e556, bffdd28d17, 9d8410e95e). (1) VerifyList.parse counts a '- ' line as a check only if it ends with a check-in hash in parentheses, the page's own rule, so help bullets can't become checks. (2) VerifyList.pending shows a line when the build's own check-in isn't in the phone's copy yet, instead of hiding it because the ancestry query found nothing. (3) VerifyView's thread lookup skips repos with no forumpost table, as ConversationReader does since 1259a8b602, so Record results can't make a concurrent sync read as failed. Checked: crystal run ci.cr exit 0 (iOS SDK not on this host, so no type-check here); the Hand checks page's one check line ends with (1259a8b602) and its help is numbered, so parse keeps it. Not checked: type-check, device. check-in: 3efea86183 user: stone-session tags: trunk
2026-10-27
18:34
Stone: don't query forumpost in repos that have none, so a sync isn't marked failed by another thread's SQLite error (forum e320232451, stone's screenshot 11624ddfb1: 'Sync failed on this phone ... no such table: forumpost', while the same log says 'Sync done ... sent: 3 received: 2'). Fossil creates the forumpost table with a repo's first forum post. ConversationReader.threads queried it in every repo; in one without forum posts SQLite logged 'no such table' to the process's stderr, which the sync running at that moment captured as its own output, and detectLocalSQLiteFailure then read it as a local failure. threads now returns no threads when PRAGMA table_info(forumpost) is empty, which raises no error. Checked: on a fresh repo PRAGMA table_info(forumpost) returns nothing without an error, while the old SELECT fails with 'no such table: forumpost'; iOS SDK type-check OK, no new warnings; crystal run ci.cr exit 0. Not checked: device. check-in: 1259a8b602 user: opus-stone tags: trunk, audited
11:05
Verify This Build: read the hand checks from the wiki page "Hand checks" in the phone's copy of the repo, not from ios/VERIFY.md bundled into the build (stone, in the terminal: "that hand check should have been data driven"). Each edit of VERIFY.md was a check-in, so it started a build: three of the last four builds (eda7431491a3, cec5772bc799, 82a235a80d19) changed nothing but that list. A wiki edit syncs to the phone but isn't exported to git, so it starts no build. The screen reads the page from the clone that has the build's check-in (else any clone with the page), with fossil wiki export, as of its last sync. A line shows only if the build includes the check-in the line names in parentheses at its end (a recursive plink query; a line naming no check-in, or one the clone doesn't have, is shown), and only until an audited tag in that clone records it as passed (a '- pass: LINE' row in a sym-audited value), so nobody removes passed lines any more. The tag now lists the hand checks before the automatic ones, so its 4,000-character cap can't cut what a later run reads back. The page is on the server (written by run-af0dbe70, with the rules for adding a check); ios/VERIFY.md is removed, with the build script's step that copied it. Checked on this repo's clone: the ancestor query finds 79a9936235 and f90ae04a14 among 0de749e606's 196 ancestors; the sym-audited query finds stone's pass of 'Screenshot in a reply'; fossil wiki export prints the page; sh -n of the stamp script; brackets balance. Not checked: Swift type-check (no toolchain here) and the phone. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GfyGYjLnZJzZ3LXEZd4epX check-in: 81e8f0d689 user: run-af0dbe70 tags: trunk, audited
10:42
ios/VERIFY.md: drop 'screenshot in a reply' (79a9936235), passed in stone's run on build cec5772bc799 (4fceaa3256, audited pass on 68156c2781) after posting a screenshot from the phone (baea9e7ca8). check-in: 0de749e606 user: opus-stone tags: trunk
2026-10-26
17:55
ios/VERIFY.md: hand check for the screenshot button (79a9936235). check-in: 68156c2781 user: opus-stone tags: trunk, audited
17:54
Stone: attach a screenshot to a reply (forum e320232451, stone's choice 889775984b: a photo button beside the reply box, screenshots on the repo's Screenshots wiki page). The photo button (PhotosPicker) beside the reply box picks an image; ConversationWriter.attachScreenshot writes it to the conversation's clone with stock commands: 'fossil user new LOGIN' if the login isn't in the clone's own user table (local only, not synced), 'fossil wiki create Screenshots' the first time, then 'fossil attachment add Screenshots FILE -U LOGIN'; it reads the attachment's hash back and adds '![Screenshot](../raw/HASH?m=TYPE)' to the reply box (relative, because Fossil's markdown doesn't prefix image sources with the repo's root, and posts and tickets are shown one level down). Everything goes out with the reply's sync. Bubbles show such images from the phone's own clone (LocalArtifactImage: fossil artifact HASH FILE), offline and without a login, and drop the image syntax from the text. Checked: iOS SDK type-check OK, no new warnings (the check now enables Swift cross-import overlays, which Xcode does, for PhotosUI's SwiftUI part); through the real bridge on a copy of this repo, user new / wiki create / attachment add as stone succeed, the attachment lookup finds the hash, fossil artifact writes the same bytes back; the app's own server serves /raw/HASH?m=image/png as image/png with the same bytes; ../raw/HASH resolves to the repo's /raw from /forumpost/... and /tktview/... on the server and in the app; the image regex helpers run in Swift on Linux; crystal run ci.cr exit 0. Not checked: the photo picker and the picture in a bubble on the phone. check-in: 79a9936235 user: opus-stone tags: trunk
14:29
ios/VERIFY.md: drop the last check, the timeline's narrow left column (f90ae04a14), passed in stone's full pass on build 31f512f60f9a (3499460c99, audited tag 'pass' on 950acb8245). No hand checks are open. check-in: 011ca321cf user: opus-stone tags: trunk, audited
14:12
ios/VERIFY.md: drop three checks passed by hand in stone's run on build 31f512f60f9a (9ad5f92978, audited tag on 950acb8245): the sync icon goes blank (7ddd7489a6), the repo screen without a title (f90ae04a14), the reply box above the keyboard (f805e3d869). One left: the timeline's narrow left column (f90ae04a14). check-in: 374a8586f4 user: opus-stone tags: trunk
13:12
ios/VERIFY.md: drop 'timeline fits' (344c519975), passed by hand in stone's run on build 10afaa57244f (f156399df9, audited tag on c1bb0db53c). check-in: 97a4a2e2d5 user: opus-stone tags: trunk
13:08
ios/VERIFY.md: drop 'results survive leaving' (c1bb0db53c), passed by hand in stone's third run on build 10afaa57244f (ff3b5b04a1, audited tag on c1bb0db53c). check-in: 950acb8245 user: opus-stone tags: trunk, audited