Problem
packages/loopover-engine/src/idea-intake.ts's IdeaSubmission/TaskGraph/ClaimPlan are pure and stateless by design (correct, per its own file-header). The only callers are MCP tools (loopover_intake_idea/loopover_plan_idea_claims, tagged for programmatic/"agent" use) and their REST mirrors. Neither has a renter/customer identity, session, or ToS-consent field, and nothing persists a submission — a submitter has no way to later ask "what happened to the idea I submitted." #7591's own addendum states consent "lives in the ToS at idea-submission time," but no submission surface today captures any identity or consent to attach that to.
Area
packages/loopover-engine/src/idea-intake.ts, src/api/routes.ts, src/db/schema.ts.
Proposal
Addendum (2026-07-21) — identity/consent decision ratified, implementation unblocked: reuse the existing src/auth/github-oauth.ts session flow as a lightweight interim identity source, rather than blocking on full billing/signup or keeping idea intake anonymous. A submitter authenticates via the existing GitHub OAuth session (no new auth flow — same infra ORB installation-admin auth already uses), and that session's identity is what a submission record binds to.
Persist a new submission record keyed by (submitter identity, submission time), capturing: the raw IdeaSubmission payload, the resulting TaskGraph/ClaimPlan if intake succeeded, and an explicit ToS-consent timestamp/version captured at submission time (per #7591's "consent lives in the ToS at idea-submission time"). idea-intake.ts's own pure/stateless functions are unaffected — this persistence wraps their callers (the MCP tools and REST mirrors), it doesn't change the pure core.
Deliverables
Resources
Boundaries
Interim identity only — this is NOT the full customer signup/billing identity model; if/when that lands, this record's identity binding may need to migrate, tracked separately rather than blocking this issue.
maintainer-only — identity/consent-bearing data model, not a first-pass contributor task.
Problem
packages/loopover-engine/src/idea-intake.ts'sIdeaSubmission/TaskGraph/ClaimPlanare pure and stateless by design (correct, per its own file-header). The only callers are MCP tools (loopover_intake_idea/loopover_plan_idea_claims, tagged for programmatic/"agent" use) and their REST mirrors. Neither has a renter/customer identity, session, or ToS-consent field, and nothing persists a submission — a submitter has no way to later ask "what happened to the idea I submitted." #7591's own addendum states consent "lives in the ToS at idea-submission time," but no submission surface today captures any identity or consent to attach that to.Area
packages/loopover-engine/src/idea-intake.ts,src/api/routes.ts,src/db/schema.ts.Proposal
Addendum (2026-07-21) — identity/consent decision ratified, implementation unblocked: reuse the existing
src/auth/github-oauth.tssession flow as a lightweight interim identity source, rather than blocking on full billing/signup or keeping idea intake anonymous. A submitter authenticates via the existing GitHub OAuth session (no new auth flow — same infra ORB installation-admin auth already uses), and that session's identity is what a submission record binds to.Persist a new submission record keyed by (submitter identity, submission time), capturing: the raw
IdeaSubmissionpayload, the resultingTaskGraph/ClaimPlanif intake succeeded, and an explicit ToS-consent timestamp/version captured at submission time (per #7591's "consent lives in the ToS at idea-submission time").idea-intake.ts's own pure/stateless functions are unaffected — this persistence wraps their callers (the MCP tools and REST mirrors), it doesn't change the pure core.Deliverables
migrations/, Drizzle types insrc/db/schema.ts).Resources
packages/loopover-engine/src/idea-intake.ts,src/api/routes.ts,src/mcp/server.tssrc/auth/github-oauth.ts(the interim identity source this now uses)Boundaries
Interim identity only — this is NOT the full customer signup/billing identity model; if/when that lands, this record's identity binding may need to migrate, tracked separately rather than blocking this issue.
maintainer-only — identity/consent-bearing data model, not a first-pass contributor task.