Skip to content

feat(projects): make the agents' instructions a project document - #2776

Draft
camielvs wants to merge 1 commit into
09-21-feat_backend_pipelines_on_the_tangent_pagefrom
09-21-feat_instructions_as_a_project_document
Draft

camielvs wants to merge 1 commit into
09-21-feat_backend_pipelines_on_the_tangent_pagefrom
09-21-feat_instructions_as_a_project_document

Conversation

@camielvs

@camielvs camielvs commented Sep 22, 2026

Copy link
Copy Markdown
Collaborator

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

{ type: "instructions" }      // payload: { content: "…" }, name: "Instructions"

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

before after
Project page sidebar Notes textarea on project.notes Instructions, on the document
Tangent Resources row project.notes the document
startSession memory seed io.projectNotes io.projectInstructions
useDebugInTangent updateProject({ notes }) creates the instructions document

project.notes stays on the API; it simply stops being the instructions channel.

Testing

pnpm run validate and npx vitest run green (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 for useDebugInTangent, which had none despite being a multi-step mutation with a rollback.

Verified in a browser: typing into Instructions on 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 reads Instructions instead of No instructions yet.

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Sep 22, 2026

Copy link
Copy Markdown

🎩 Preview

A preview build has been created at: 09-21-feat_instructions_as_a_project_document/46e8d15

camielvs commented Sep 22, 2026

Copy link
Copy Markdown
Collaborator Author

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

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
camielvs force-pushed the 09-21-feat_backend_pipelines_on_the_tangent_page branch from 4a1e782 to a6f8245 Compare September 23, 2026 20:57
@camielvs
camielvs force-pushed the 09-21-feat_instructions_as_a_project_document branch from d522246 to 46e8d15 Compare September 23, 2026 20:57

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant