Conversation
PAPERBELL_SUITE.md has always described outputs linking back to their project via `project: <acronym>`, but nothing wrote it: a paper scaffolded into 50 - Outputs carried no field naming the project it belongs to, so Project Manager could not recognize it as a deliverable. The new-paper modal now asks. The answer is written as a top-level `project:` key in the frontmatter of every draft index note it creates — main, supplementary, response, and cover letter alike. metadata.json is left alone; it stays pure publication metadata. Leaving the field empty omits the key entirely, since an empty `project:` reads as a null association to a sibling querying frontmatter. Note that `project` (the project's acronym) and `_longform.acronym` (the paper's own, used for PDF filenames) are different values with different jobs; the UI labels them apart. The field's contents come from the host when it can serve them, and from the user otherwise. `fetchProjects()` returns null for a missing host, a host too old to implement the call, a denied consent prompt, a host-side error, and an empty list — all of which leave the plain text box the field was built as. The fetch is fire-and-forget, so creating a paper never waits on, or fails because of, PaperBell. That host call is a proposal, not something any shipped host implements: a `projects` scope with requestProjects(), a paperbell:projects-changed event, and the PPBProject shape. It is vendored into shared-config.ts and flagged there as ours, with the client methods declared optional and every caller gating on capability + typeof — so it stays inert against the 0.4.4 host in the test vault. PPB_SCHEMA_VERSION deliberately stays at 1 so the "host schema is newer than vendored" warning keeps working for a real upstream v2. docs/PROPOSAL_PROJECTS_SCOPE.md writes the whole thing up for the host team, including the two questions that matter more than the API: which frontmatter shape Project Manager actually queries, and the fact that one paper is up to four notes needing dedupe by longform.title. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This was referenced Aug 17, 2026
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.
What
The New PaperBell paper project… modal now asks which PaperBell project the paper is a deliverable of, and writes the answer as a top-level
project:key in the frontmatter of every draft index note it creates.docs/PAPERBELL_SUITE.mdhas always described outputs linking back to their project viaproject: <acronym>, but nothing wrote it — so a paper scaffolded into50 - Outputscarried no field naming its project, and Project Manager could not recognize it as a deliverable.Decisions
metadata.jsonstays pure publication metadataproject: ColMemo), not a wikilinkproject(the project's acronym) and_longform.acronym(the paper's own, used for PDF filenames) are different values with different jobs; the UI labels them apart. An empty selection omits the key entirely rather than writing an emptyproject:.Host integration — a proposal, inert today
The project list comes from a proposed
projectsscope (requestProjects(),paperbell:projects-changed,PPBProject). No shipped host implements it. It is vendored intosrc/paperbell/shared-config.tsand flagged there as ours, with the client methods declared optional and every caller gating oncapabilitiesandtypeof method === "function"— so it stays completely inert against the 0.4.4 host.PPB_SCHEMA_VERSIONdeliberately stays at1so the "host schema is newer than vendored" warning keeps working for a real upstream v2.docs/PROPOSAL_PROJECTS_SCOPE.mdwrites it up for the host team, including the two questions that matter more than the API itself:[[wikilink]], changing the writer is one line — migrating users' notes is not.project:. Dedupe key islongform.title, identical across a paper's drafts.MAINTAINING.mdrecords the re-vendoring hazard: a straight copy from upstream, for any reason, deletes the proposal block and breaks the build.Verification
ok: false, host throws.test/paperbell/host-conformance.test.tsgains a block that stays skipped today and arms itself once a host bundle carryingrequestProjectsis installed.Still owed (manual, needs a real vault): confirming the new top-level
project:doesn't affectstrip-frontmatter/ pandoc export. It sits outside thelongform:block and goes through the existing whole-block strip, so no impact is expected — but it hasn't been run in Obsidian.🤖 Generated with Claude Code