diff --git a/SKILL.md b/SKILL.md index 4007cb4..235765a 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 recommendation and Self's lean marked, on its area's desk (one Persona +in the booth), 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..26b0596 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 `questions/` and reads `answers/` through `ArtifactData`; `make-poses.py` builds a Persona's mood set. Fields, desks 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..bf224d7 --- /dev/null +++ b/tools/fork-desk/README.md @@ -0,0 +1,61 @@ +# Fork desk + +The operator answers forks on a standing claude.ai artifact instead of a list in +prose (`eureka-substrate:ruling:fork-desk-reusable`). The format is the Aetheria +Self's Nibu desk (`eureka-substrate:ruling:fork-desk-nibu-format`): one Persona in a +booth that follows the viewport and changes expression as she interacts. 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. + +- One desk per Self area, all publishing this same `desk.html` and `poses/`: + - Eureka area: https://claude.ai/artifact/LBZMjcWDLjQtwkqJTLzfR4 + - Aetheria/Ghostlight area: https://claude.ai/artifact/HccfYaXb84FMEPAWRyf8aY +- The Persona in the booth follows what the forks are about, not which Self asks: + Libby for CultLib work, Nibu for Aetheria work, and so on + (`eureka-substrate:ruling:fork-desk-presenter-follows-work`). Self sets + `desk/config.persona` when it posts a batch. +- Self republishes with `url` set to its area's desk, never a new artifact. `db` + capability, default rules. + +## Desk config + +`desk/config`: `persona` (a key in the page's `PERSONAS`), `kicker`, `title`. + +## Self posts a fork + +`ArtifactData` `set` (or one `batch`) on collection `questions`, doc id = the mind id +(`:question: