The TEST-s branch carried a patch-equivalent Popi.TV login commit that conflicts with newer API routing files when merged normally. This merge records TEST-s as a parent while keeping the already verified master tree unchanged, so the test branch can fast-forward without a force push.
Constraint: Do not force-push TEST-s or hand-resolve unrelated API route conflicts for a text-node rollout.
Rejected: Force push HEAD to TEST-s | would drop the remote branch commit from visible history.
Rejected: Manual content merge | conflicts are outside this text document node change and the remote patch is already represented locally.
Confidence: medium
Scope-risk: narrow
Directive: Revisit TEST-s ancestry before future long-lived branch syncs; avoid carrying duplicate patch-equivalent commits across master and TEST-s.
Tested: git diff --stat 7281d4f..HEAD is empty
Tested: prior text node verification on 7281d4f: vitest target suite, next build, git diff --check
Not-tested: Full test suite after ancestry-only merge, because the tree is identical to 7281d4f.
Prompt nodes now accept TXT, Markdown, and DOCX uploads while preserving the node contract as plain prompt text. The canvas preview shows imported Markdown as a lightweight document card, and DOCX extraction stays local to body text so generation inputs remain deterministic.
Constraint: Text-class nodes must still output plain text into existing workflow edges.
Rejected: Add a full document editor/parser layer | too broad for the requested node-level upload and preview behavior.
Confidence: high
Scope-risk: moderate
Directive: Keep uploaded document data normalized to prompt text unless downstream nodes explicitly gain rich document inputs.
Tested: npm run test:run -- src/components/__tests__/PromptNode.test.tsx src/components/modals/__tests__/MarkdownEditorModal.test.tsx src/utils/__tests__/textDocumentImport.test.ts --reporter=dot
Tested: npm run build
Tested: git diff --check
Not-tested: npm run lint still fails because Next 16 treats the existing next lint script as a /lint project path.
The provider branch makes model defaults and Popi metadata resolution more asynchronous, while the local UI keeps duplicate node-body settings hidden. This keeps pricing available when metadata is already complete, avoids refreshing placeholder Popi selections, preserves explicit Popi schema hydration, and fixes strict TypeScript narrowing exposed by the merged media upload route.
Constraint: Preserve hidden node-body settings while keeping Popi provider schema hydration available.
Rejected: Re-enable inline node settings for all external providers | would reintroduce duplicated controls the user asked to hide.
Confidence: high
Scope-risk: moderate
Directive: Do not fetch per-model schemas for hidden non-Popi node settings unless an explicit modelSchemaRequestId requests it.
Tested: npm run test:run -- src/components/__tests__/PromptNode.test.tsx src/components/__tests__/WorkflowCanvas.test.tsx src/components/modals/__tests__/MarkdownEditorModal.test.tsx src/components/__tests__/FloatingNodeHeader.test.tsx src/components/__tests__/LLMGenerateNode.test.tsx src/components/__tests__/GenerateImageNode.test.tsx src/components/__tests__/GenerateVideoNode.test.tsx src/components/__tests__/GenerationComposer.test.tsx src/app/api/generate/providers/__tests__/popiserver.test.ts src/app/api/__tests__/popiserverModels.test.ts --reporter=dot
Tested: npm run build
Tested: git diff --check
Tested: rg -n '^(<<<<<<<|=======|>>>>>>>)' src
Not-tested: npm run lint cannot run because the existing Next 16 script maps next lint to a missing ./lint project directory.
The provider branch adds Popi server routing, dynamic model schema plumbing, and generation parameter updates. The only content conflict was PromptNode display behavior, resolved by keeping selectable text/drag isolation from the provider branch while retaining the Markdown editor entry point and bounded scrolling from the local text-node work.
Constraint: Merge origin/feature/add_provider_popi without dropping local Markdown/text-node editing support
Rejected: Accept either side wholesale in PromptNode.tsx | either path would lose selectable text behavior or the Markdown editor entry
Confidence: medium
Scope-risk: broad
Directive: PromptNode display must keep nodrag/nopan/select-text and avoid long text overflowing its node bounds
Tested: pending post-merge verification
Not-tested: Full runtime provider integration before merge commit
Text prompt and LLM output nodes need document-style editing without changing their existing node data contracts, so Markdown editing now writes back to the same prompt/outputText fields and Markdown files import as prompt nodes. Canvas shortcuts ignore local editors so document copy/paste remains native inside the modal.
Constraint: Preserve existing prompt and LLM node data contracts
Rejected: Replace inline prompt editing | would change current node interaction behavior
Confidence: high
Scope-risk: moderate
Directive: Keep canvas-level keyboard shortcuts out of modal and contentEditable targets
Tested: npm run test:run -- src/components/__tests__/PromptNode.test.tsx src/components/__tests__/WorkflowCanvas.test.tsx src/components/modals/__tests__/MarkdownEditorModal.test.tsx src/components/__tests__/FloatingNodeHeader.test.tsx src/components/__tests__/LLMGenerateNode.test.tsx
Tested: npm run build
Tested: git diff --check
Not-tested: npm run lint (existing Next 16 next lint path failure)