From a64bb8d82dcb0bc188c4316b2c8079df0eb2b218 Mon Sep 17 00:00:00 2001 From: Eureka Date: Fri, 16 Oct 2026 00:19:07 +0200 Subject: [PATCH 1/2] Fork desk: forks go to one standing artifact the operator answers on desk.html renders open forks from its db (forks/) with the asking Persona's pose beside each card; the operator's picks land in answers/ for Self to admit as rulings. SKILL.md step 2 names the flow; the README holds the fields and the read-back rule. Operator ruling eureka-substrate:ruling:fork-desk-reusable. Co-Authored-By: Claude Opus 5.5 --- SKILL.md | 9 + tools/INDEX.md | 1 + tools/fork-desk/README.md | 45 ++++ tools/fork-desk/desk.html | 249 ++++++++++++++++++++ tools/fork-desk/poses/libby/amused.webp | Bin 0 -> 26378 bytes tools/fork-desk/poses/libby/annoyed.webp | Bin 0 -> 26752 bytes tools/fork-desk/poses/libby/concerned.webp | Bin 0 -> 25596 bytes tools/fork-desk/poses/libby/determined.webp | Bin 0 -> 26940 bytes tools/fork-desk/poses/libby/happy.webp | Bin 0 -> 26158 bytes tools/fork-desk/poses/libby/neutral.webp | Bin 0 -> 25838 bytes tools/fork-desk/poses/libby/research.webp | Bin 0 -> 28264 bytes tools/fork-desk/poses/libby/schema.webp | Bin 0 -> 30126 bytes tools/fork-desk/poses/libby/shush.webp | Bin 0 -> 28074 bytes tools/fork-desk/poses/libby/stamp.webp | Bin 0 -> 26696 bytes tools/fork-desk/poses/libby/surprised.webp | Bin 0 -> 27010 bytes tools/fork-desk/poses/libby/thinking.webp | Bin 0 -> 25438 bytes 16 files changed, 304 insertions(+) create mode 100644 tools/fork-desk/README.md create mode 100644 tools/fork-desk/desk.html create mode 100644 tools/fork-desk/poses/libby/amused.webp create mode 100644 tools/fork-desk/poses/libby/annoyed.webp create mode 100644 tools/fork-desk/poses/libby/concerned.webp create mode 100644 tools/fork-desk/poses/libby/determined.webp create mode 100644 tools/fork-desk/poses/libby/happy.webp create mode 100644 tools/fork-desk/poses/libby/neutral.webp create mode 100644 tools/fork-desk/poses/libby/research.webp create mode 100644 tools/fork-desk/poses/libby/schema.webp create mode 100644 tools/fork-desk/poses/libby/shush.webp create mode 100644 tools/fork-desk/poses/libby/stamp.webp create mode 100644 tools/fork-desk/poses/libby/surprised.webp create mode 100644 tools/fork-desk/poses/libby/thinking.webp diff --git a/SKILL.md b/SKILL.md index 4007cb4..5e24d61 100644 --- a/SKILL.md +++ b/SKILL.md @@ -247,6 +247,15 @@ cite its id, so agents read the operator's own words. A ruling that changes an earlier one supersedes it by a `resolution`, never by an edit, so the rulings-in-force recipe shows one live design. +**Forks go to the fork desk.** Self posts every open question it puts to the +operator as a card on the standing fork desk, read from the question document, +with the asking Persona's pose and one line of Self's lean, and gives her the +link; she picks and adds her words there. Self reads the answers back, admits +the rulings, and closes the cards. `tools/fork-desk/README.md` has the fields and +the read-back rule. A note that pulls against its choice is asked about before +any ruling is admitted. Operator, 2026-10-16: "it's much more friendly than +answering a list of forks in prose" (`eureka-substrate:ruling:fork-desk-reusable`). + **The operator channel is this session.** Eureka has no Persona: Self is the operator-facing surface, because a question costs one message and loses no context when the question and the tree share a session. When a blocking question diff --git a/tools/INDEX.md b/tools/INDEX.md index f629edb..f75952d 100644 --- a/tools/INDEX.md +++ b/tools/INDEX.md @@ -14,3 +14,4 @@ gets a Soul pass before merge. | `tools/testparse.sh` | Sourced library: failing test names and pass/fail/skip counts from cargo, dotnet, vitest, jest and pytest logs, and test files that failed to load (`LOADFAIL`). Shared by the summary and the kill table. | the two scripts above | not named by a brief; it lives and dies with them | | `tools/test-tools.sh` | Local fixture check of the parsers and the summary over `tools/fixtures/logs` (real cargo and mutation logs, plus hand-written dotnet, vitest, jest, pytest, exit-0-but-failed and no-verdict logs), and of the mutation runner's host driver and container half under a mock docker. Run it before merging a change to the scripts above. | whoever changes those scripts | `SKILL.md` (Shared tools) | | `tools/context-pack.py` | `py -3 tools/context-pack.py [--since ] [--only [,...]] [--spec-json ] [--max-lines ]`. Carries a cut_spec's `file_changes` anchors from the spec's base to the worktree by `git diff` hunks (the working tree included) and prints one header, a status table (SAME, MOVED, TOUCHED, RENAMED, NEW, GONE, OUT_OF_RANGE, UNRESOLVED) and windows of at most 100 lines numbered in worktree lines, within `--max-lines` (800). Exit 3 when an anchor cannot be carried, 4 when the spec is unreadable (fetched by id through the eureka-state binding, retried once on Unavailable; `--spec-json` takes a saved view). `--since ` re-prints only the windows edited since that commit. Standard library plus git; writes nothing. | Hands, Soul, Imagination | `references/briefs.md` (Imagination map, Hands, Soul), `SKILL.md` (step 1) | +| `tools/fork-desk/` | The operator's fork desk page (`desk.html`, `poses/`), published at one standing artifact; Self feeds `forks/` and reads `answers/` through `ArtifactData`. Field table and read-back rule in its README. | Self | `SKILL.md` (step 2) | diff --git a/tools/fork-desk/README.md b/tools/fork-desk/README.md new file mode 100644 index 0000000..a615a7d --- /dev/null +++ b/tools/fork-desk/README.md @@ -0,0 +1,45 @@ +# Fork desk + +The operator answers forks on one standing claude.ai artifact instead of a list in +prose (operator ruling `eureka-substrate:ruling:fork-desk-reusable`). The page is a +projection: the mind holds the questions and the rulings; the page's `db` is only the +mailbox between Self and the operator. + +- Desk: https://claude.ai/artifact/LBZMjcWDLjQtwkqJTLzfR4 (owner: the operator; Self + republishes `desk.html` and `poses/` with `url` set to it, never a new artifact). +- `db` capability, default rules (signed-in editors write). + +## Self posts a fork + +`ArtifactData` `set` (or one `batch`) on collection `forks`, doc id = the mind id +(`:question: