From feea2e67de5148bb3edf2491927e533b78363dee Mon Sep 17 00:00:00 2001 From: Labyricorn Date: Tue, 11 Aug 2026 22:43:26 -0700 Subject: [PATCH] Add Labyricorn project and devlog content --- .labyricorn/README.md | 37 ++++++++++++++ .../devlog/build-week-submission/contents.lr | 33 +++++++++++++ .../configurable-model-prompts/contents.lr | 31 ++++++++++++ .labyricorn/devlog/contents.lr | 7 +++ .labyricorn/devlog/desktop-mvp/contents.lr | 33 +++++++++++++ .labyricorn/devlog/native-only/contents.lr | 33 +++++++++++++ .../devlog/provenance-contract/contents.lr | 38 +++++++++++++++ .../writing-workspace-framework/contents.lr | 30 ++++++++++++ .labyricorn/project/contents.lr | 45 ++++++++++++++++++ .labyricorn/project/icon.png | Bin 0 -> 7977 bytes 10 files changed, 287 insertions(+) create mode 100644 .labyricorn/README.md create mode 100644 .labyricorn/devlog/build-week-submission/contents.lr create mode 100644 .labyricorn/devlog/configurable-model-prompts/contents.lr create mode 100644 .labyricorn/devlog/contents.lr create mode 100644 .labyricorn/devlog/desktop-mvp/contents.lr create mode 100644 .labyricorn/devlog/native-only/contents.lr create mode 100644 .labyricorn/devlog/provenance-contract/contents.lr create mode 100644 .labyricorn/devlog/writing-workspace-framework/contents.lr create mode 100644 .labyricorn/project/contents.lr create mode 100644 .labyricorn/project/icon.png diff --git a/.labyricorn/README.md b/.labyricorn/README.md new file mode 100644 index 0000000..e816593 --- /dev/null +++ b/.labyricorn/README.md @@ -0,0 +1,37 @@ +# Labyricorn publishing content + +This directory is the source of Thinkloom's project exhibition and development +log on Labyricorn. The application repository remains the source of truth for +this content; the Labyricorn site imports it as read-only content. + +The content uses native Lektor records: + +```text +.labyricorn/ +├── project/ +│ ├── contents.lr +│ └── icon.png +└── devlog/ + ├── contents.lr + └── / + └── contents.lr +``` + +Rules: + +- `project/contents.lr` uses the `project` model. +- `devlog/contents.lr` uses the `devlog` model. +- Each published entry is a directory below `devlog/` containing a + `contents.lr` record using the `devlog-entry` model. +- Entry directory names are stable public slugs. Do not rename a published + entry without arranging a redirect on the Labyricorn site. +- Dates use `YYYY-MM-DD`. +- `source_commit` is the full commit ID most directly associated with the + entry. The site uses it to create a repository link. +- Images and other publishing attachments must stay inside `.labyricorn/`. +- Do not put credentials, generated builds, application state, or executable + code in this directory. + +The Labyricorn synchronization job reads content from an exact repository +commit. Editing these records does not itself deploy the site; scheduled +synchronization is the publication fallback. diff --git a/.labyricorn/devlog/build-week-submission/contents.lr b/.labyricorn/devlog/build-week-submission/contents.lr new file mode 100644 index 0000000..bb8ec9f --- /dev/null +++ b/.labyricorn/devlog/build-week-submission/contents.lr @@ -0,0 +1,33 @@ +_model: devlog-entry +--- +schema_version: 1 +--- +title: Preparing the Build Week submission +--- +date: 2026-07-17 +--- +author: Christopher Chambers +--- +summary: The project was packaged with its demo, judging guide, license, collaboration record, and release-oriented documentation. +--- +tags: OpenAI Build Week, release, documentation +--- +source_commit: 9c2ab17c2508f181ad7adee635cc4d21b37aa2b6 +--- +body: + +Preparing Thinkloom for OpenAI Build Week required more than producing a working +binary. The submission needed to explain the problem, demonstrate the product +without relying on private context, and document how Christopher and Codex +collaborated during the build. + +This milestone added the submission narrative, a repeatable demo script, +testing guidance for judges, and the AGPL-3.0 license. It also separated claims +that could be demonstrated from release gates that still required external +assets or owner decisions, such as code signing and bundled voice models. + +That distinction remains important to the project: completed functionality is +documented plainly, while unfinished conformance or distribution work is not +presented as done. + +[View the submission commit](https://git.labyricorn.com/Labyricorn/thinkloom-openai-hackathon/commit/9c2ab17c2508f181ad7adee635cc4d21b37aa2b6) diff --git a/.labyricorn/devlog/configurable-model-prompts/contents.lr b/.labyricorn/devlog/configurable-model-prompts/contents.lr new file mode 100644 index 0000000..645c6a1 --- /dev/null +++ b/.labyricorn/devlog/configurable-model-prompts/contents.lr @@ -0,0 +1,31 @@ +_model: devlog-entry +--- +schema_version: 1 +--- +title: Making model prompts configurable +--- +date: 2026-07-17 +--- +author: Christopher Chambers +--- +summary: Conversation and drafting prompts moved into documented, user-editable JSON files that reload without rebuilding the application. +--- +tags: prompts, models, configuration, user-control +--- +source_commit: 58e5510445d7ab403d8df0792c29743a933531e0 +--- +body: + +Thinkloom's model behavior should not be a hidden, immutable part of the +application. Conversation and drafting prompts were moved into structured JSON +templates and documented as part of the project configuration. + +The application creates user-owned copies and reloads them before each request, +so a technical writer can adjust instructions without rebuilding or restarting +Thinkloom. Validation happens before a request is sent: invalid JSON or missing +template variables produce a recoverable error and leave the writing unchanged. + +This work reinforced two of the project's recurring principles—model behavior +should be inspectable, and failure should not silently alter a manuscript. + +[View the configurable-prompts commit](https://git.labyricorn.com/Labyricorn/thinkloom-openai-hackathon/commit/58e5510445d7ab403d8df0792c29743a933531e0) diff --git a/.labyricorn/devlog/contents.lr b/.labyricorn/devlog/contents.lr new file mode 100644 index 0000000..c70d100 --- /dev/null +++ b/.labyricorn/devlog/contents.lr @@ -0,0 +1,7 @@ +_model: devlog +--- +schema_version: 1 +--- +title: Thinkloom development log +--- +summary: Milestones and design decisions from the development of Thinkloom. diff --git a/.labyricorn/devlog/desktop-mvp/contents.lr b/.labyricorn/devlog/desktop-mvp/contents.lr new file mode 100644 index 0000000..d9fe0b4 --- /dev/null +++ b/.labyricorn/devlog/desktop-mvp/contents.lr @@ -0,0 +1,33 @@ +_model: devlog-entry +--- +schema_version: 1 +--- +title: Building the native desktop MVP +--- +date: 2026-07-17 +--- +author: Christopher Chambers +--- +summary: The workspace became a Tauri desktop application with a React interface, Rust service layer, local persistence, provenance, exports, and recovery behavior. +--- +tags: Tauri, React, Rust, MVP +--- +source_commit: b5e6eafa1c4e9b787250c15e6453c2d61dc8830c +--- +body: + +The first desktop MVP moved Thinkloom from the workspace framework into a Tauri +2 application. React and TypeScript provided the interaction surface, while the +Rust service layer took responsibility for local persistence and native +operations. + +This milestone connected the main workflow end to end: project state, idea +curation, drafting, version history, provider boundaries, exports, backups, and +an inspectable provenance trail. SQLite held live state while canonical files +and hidden Git checkpoints provided durable, reviewable recovery points. + +The goal was not merely to wrap a web interface in a desktop shell. The native +boundary made local files, operating-system credentials, atomic writes, and +offline ownership part of the product itself. + +[View the MVP commit](https://git.labyricorn.com/Labyricorn/thinkloom-openai-hackathon/commit/b5e6eafa1c4e9b787250c15e6453c2d61dc8830c) diff --git a/.labyricorn/devlog/native-only/contents.lr b/.labyricorn/devlog/native-only/contents.lr new file mode 100644 index 0000000..7275ce6 --- /dev/null +++ b/.labyricorn/devlog/native-only/contents.lr @@ -0,0 +1,33 @@ +_model: devlog-entry +--- +schema_version: 1 +--- +title: Choosing a native-only product boundary +--- +date: 2026-07-17 +--- +author: Christopher Chambers +--- +summary: Thinkloom removed its hosted and browser-companion paths so the implementation matched its local-first product promise. +--- +tags: architecture, local-first, privacy +--- +source_commit: 7866081c7882f8c59d137b126a6fe0278eda87df +--- +body: + +During implementation, Thinkloom briefly contained hosted and browser-facing +scaffolding alongside the desktop application. That created a mismatch with the +product being described: a native, local-first writing studio with no required +account or hosted companion. + +The project removed the Sites, Next, worker, and browser-companion paths and +made Tauri the sole application target. This reduced the deployment surface and +made the privacy boundary easier to understand: manuscripts, project state, and +credentials belong on the writer's machine. + +The change was as much a product decision as a technical cleanup. A smaller, +clearer architecture made it possible to state honestly what Thinkloom was—and +what it deliberately was not. + +[View the native-only commit](https://git.labyricorn.com/Labyricorn/thinkloom-openai-hackathon/commit/7866081c7882f8c59d137b126a6fe0278eda87df) diff --git a/.labyricorn/devlog/provenance-contract/contents.lr b/.labyricorn/devlog/provenance-contract/contents.lr new file mode 100644 index 0000000..b44ef34 --- /dev/null +++ b/.labyricorn/devlog/provenance-contract/contents.lr @@ -0,0 +1,38 @@ +_model: devlog-entry +--- +schema_version: 1 +--- +title: Formalizing the provenance contract +--- +date: 2026-07-18 +--- +author: Christopher Chambers +--- +summary: The provenance design advanced from a normative architecture into versioned schemas, fixtures, verification vectors, and canonical assertion envelopes. +--- +tags: provenance, JSON Schema, verification, v0.4.0 +--- +source_commit: cb36bbc95895244f067934adc3531e733c0950db +--- +body: + +Thinkloom's provenance goals require more than an activity timeline. The system +needs stable records, explicit retention rules, deterministic verification, and +a way to describe contribution relationships without making unsupported claims +about authorship. + +The Stage 1 work documented the normative architecture and state machines. The +Stage 2 package then introduced JSON Schema contracts, valid and invalid +fixtures, canonicalization and event-chain vectors, release Merkle construction, +key-rotation cases, and verification statuses. + +Version 0.4.0 extended that foundation with immutable provenance assertions, +point-in-time evaluations, semantic registries, independent confidence +dimensions, evidence classes, stable reason codes, and deterministic dependency +invalidation vectors. + +The schema package is a formal design and test contract. The current native +writer must not be described as conforming until the later implementation and +fault-injection stages are complete. + +[View the v0.4.0 commit](https://git.labyricorn.com/Labyricorn/thinkloom-openai-hackathon/commit/cb36bbc95895244f067934adc3531e733c0950db) diff --git a/.labyricorn/devlog/writing-workspace-framework/contents.lr b/.labyricorn/devlog/writing-workspace-framework/contents.lr new file mode 100644 index 0000000..0772dcb --- /dev/null +++ b/.labyricorn/devlog/writing-workspace-framework/contents.lr @@ -0,0 +1,30 @@ +_model: devlog-entry +--- +schema_version: 1 +--- +title: Establishing the writing workspace +--- +date: 2026-07-16 +--- +author: Christopher Chambers +--- +summary: The first working framework established the conversation-first writing workspace and the visual language that would become Thinkloom. +--- +tags: interface, writing-workspace, prototype +--- +source_commit: c20e7a94fa8d1116e78afb8bec826e3ae593e0a3 +--- +body: + +Thinkloom began as a working writing-workspace framework rather than as a set of +detached mockups. The first implementation explored how conversation, ideas, +drafting, and project context could coexist without turning the editor into a +generic chat window. + +The framework established the visual hierarchy and the central product idea: +model assistance should remain visible and useful, while the writer controls +what enters the manuscript. This initial version provided a concrete surface +for testing the workflow before committing to the native application +architecture. + +[View the originating commit](https://git.labyricorn.com/Labyricorn/thinkloom-openai-hackathon/commit/c20e7a94fa8d1116e78afb8bec826e3ae593e0a3) diff --git a/.labyricorn/project/contents.lr b/.labyricorn/project/contents.lr new file mode 100644 index 0000000..48b37d6 --- /dev/null +++ b/.labyricorn/project/contents.lr @@ -0,0 +1,45 @@ +_model: project +--- +schema_version: 1 +--- +project_id: thinkloom +--- +title: Thinkloom +--- +summary: A native, local-first writing studio for moving from conversation to a versioned release while preserving an inspectable creative-process record. +--- +status: active +--- +started: 2026-07-16 +--- +author: Christopher Chambers +--- +repository_url: https://git.labyricorn.com/Labyricorn/thinkloom-openai-hackathon +--- +default_branch: main +--- +logo: icon.png +--- +tags: Tauri, React, TypeScript, Rust, SQLite, local-first, writing, provenance +--- +body: + +Thinkloom is a native writing studio built for one writer. It supports a path +from conversation and idea curation through drafting, revision, named versions, +and release, while keeping the creative process inspectable. + +The application combines a Tauri 2 desktop shell with React and TypeScript, +Rust services, SQLite state, canonical Markdown and JSON files, hidden Git +checkpoints, operating-system credential storage, and atomic exports. It has no +hosted or browser companion: the product boundary is deliberately local-first. + +The work began during OpenAI Build Week 2026. Product decisions emphasized +preview-first model assistance, explicit user control, reversible operations, +and provenance that records relationships without reducing authorship to a +single percentage. + +Current development includes structured manuscript editing, configurable model +providers and prompts, recovery snapshots, versioned releases, sanitized +evidence exports, and a formal provenance schema package. The normative +provenance design is documented; completing the native implementation and its +fault-injection conformance remains future work. diff --git a/.labyricorn/project/icon.png b/.labyricorn/project/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3cb29bb08788805212c37158c2667f949c336565 GIT binary patch literal 7977 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 literal 0 HcmV?d00001