feat: add browser-local ContentSignal manual intake - #190
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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.
Implements
Closes #152 end to end for the owner-first browser-local path. This replaces draft PR #189 using the exact same verified branch/head because the connector could not transition the draft state.
Product outcome
SignalFlow now has a real durable record before Campaign/opportunity generation:
manual thought/event/topic → ContentSignal → browser persistence → lifecycle/historyA ContentSignal remains evidence/context, not generated content. Creating one does not call AI, create a Campaign, score an opportunity, schedule, or publish anything.
Implemented
ContentSignaldomain record and schema;sourceArtifactIds[]/assetIds[]references rather than copied source business rules;new,interpreted,used,ignored,snoozed,archived;/signalsworkspace with manual capture, edit, privacy/boundary controls, filters, snooze/ignore/archive/restore;0 automatic detections — Not implemented,No AI call, and no publishing/generation claim;Scale boundary
The Personal Alpha adapter is browser-local today, but the domain and application contracts do not depend on localStorage. A future authenticated/Postgres adapter can replace the repository without replacing the signal model or UI/application contract.
ContentSignal history is intentionally not yet claimed as part of the portable campaign archive or cloud sync; that limitation is documented explicitly.
Non-goals preserved
This PR does not implement GitHub/webhook ingestion (#161), automatic event detection, ContentOpportunity scoring/ranking (#156), AI generation, editorial calendar, or automatic posting. The current Campaign generation path remains additive and independent.
Verification
Final standard CI on exact head
78b10ab4536db20acfff778bfd87c0948a746925is green:npm test✅Regression coverage includes schema/future-version failure, serialization safety, workspace isolation, duplicate IDs, manual create/read/list/update, project-less/project-scoped records, source/asset validation, lifecycle persistence, refresh/reopen recovery, adapter lifecycle, application-boundary/static truth, and Campaign independence.