Conversation
🎩 PreviewA preview build has been created at: |
This was referenced Sep 22, 2026
Draft
Collaborator
Author
This was referenced Sep 22, 2026
One field, two names: the project page called it Notes, Tangent called it Instructions, and both wrote `project.notes`. Whichever name you met first was the one you thought it had, and nothing said the box on one page was the row on the other. It is now a document, because that is what it is — a body of text the project carries. Everything that already handles documents handles it: it is stored, read and written like one, rather than being a field on the project that only two screens know to look at. Both pages read and write it through one hook, so neither can drift into its own idea of where it lives. Reading it takes two requests, the list to find the row and the row for what it says, because the list leaves payloads out. Both are already fetched by anything showing a project. It is kept out of the project page's resource list: it has a box of its own there, and listing it as well would offer two ways to write one thing and a Remove that silently wipes it. `project.notes` stays on the API and stops being the instructions channel. Sessions are seeded from the document, and a debug project writes its brief there instead. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
camielvs
force-pushed
the
09-21-feat_backend_pipelines_on_the_tangent_page
branch
from
September 23, 2026 20:57
4a1e782 to
a6f8245
Compare
camielvs
force-pushed
the
09-21-feat_instructions_as_a_project_document
branch
from
September 23, 2026 20:57
d522246 to
46e8d15
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Last of the standardization PRs.
Why
One field, two names. The project page called it Notes; Tangent called it Instructions; both wrote
project.notes. Whichever name you met first was the one you thought it had, and nothing on either page said the box on one was the row on the other.What it is now
A document, because that is what it is — a body of text the project carries. Everything that already handles documents handles it, rather than it being a field on the project that only two screens know to look at.
Both pages read and write it through one hook,
useProjectInstructions, so neither can drift into its own idea of where it lives. Reading takes two requests — the list to find the row, the row for what it says, because the list leaves payloads out — and both are already fetched by anything showing a project.It is kept out of the project page's resource list. It has a box of its own there, and listing the document as well would offer two ways to write one thing and a Remove that silently wipes it.
The four consumers
Notestextarea onproject.notesInstructions, on the documentproject.notesstartSessionmemory seedio.projectNotesio.projectInstructionsuseDebugInTangentupdateProject({ notes })project.notesstays on the API; it simply stops being the instructions channel.Testing
pnpm run validateandnpx vitest rungreen (3079 tests). New: six cases over the hook — including two clients racing a second document into existence, where the oldest wins so every reader agrees — and a first test foruseDebugInTangent, which had none despite being a multi-step mutation with a rollback.Verified in a browser: typing into
Instructionson the project page writes one{type: "instructions"}row, that row does not appear in the page's own Documents group, and Tangent's Resources row readsInstructionsinstead ofNo instructions yet.🤖 Generated with Claude Code