githubnext/chopinPublic

Let's compose rich plans together

Jev conversation-to-document workflow #241

ClosedMaggieAppletonclosed 156 commits intomainfromrefs/pull/241/head
ConversationFiles changed
862 files changed+94627-2438
StackedSplit
.env.example+8 −0
AGENTS.md+16 −15
README.md+4 −0
apps/server/src/agent/card-tool-context.ts+10 −0
apps/server/src/agent/decision-prose-1.test.ts+53 −0
apps/server/src/agent/decision-prose-2.test.ts+98 −0
apps/server/src/agent/decision-prose-3.test.ts+48 −0
apps/server/src/agent/decision-prose-4.test.ts+70 −0
apps/server/src/agent/decision-prose-5.test.ts+56 −0
apps/server/src/agent/decision-prose-fields.ts+16 −0
apps/server/src/agent/decision-prose.test-fixtures.ts+112 −0
apps/server/src/agent/decision-prose.ts+104 −0
apps/server/src/agent/heading-harness.test-fixtures.ts+133 −0
apps/server/src/agent/heading-harness.test.ts+129 −0
apps/server/src/agent/heading-tool.test-bridge.ts+18 −0
apps/server/src/agent/heading-tool.test.ts+226 −0
apps/server/src/agent/heading-tool.ts+124 −0
apps/server/src/agent/job-scope.test.ts+134 −0
apps/server/src/agent/job-scope.ts+71 −0
apps/server/src/agent/job-tool-context.ts+18 −0
apps/server/src/agent/job-tools.ts+66 −0
apps/server/src/agent/refine-fields.ts+96 −0
apps/server/src/agent/refine-placement.ts+43 −0
apps/server/src/agent/refine-tool-1.test.ts+129 −0
apps/server/src/agent/refine-tool-2.test.ts+36 −0
apps/server/src/agent/refine-tool-3.test.ts+161 −0
apps/server/src/agent/refine-tool-4.test.ts+109 −0
apps/server/src/agent/refine-tool-5.test.ts+107 −0
apps/server/src/agent/refine-tool-6.test.ts+96 −0
apps/server/src/agent/refine-tool-7.test.ts+80 −0
apps/server/src/agent/refine-tool-8.test.ts+116 −0
apps/server/src/agent/refine-tool-9.test.ts+38 −0
apps/server/src/agent/refine-tool.test-fixtures.ts+188 −0
apps/server/src/agent/refine-tool.ts+181 −0
apps/server/src/agent/revise-fields.ts+57 −0
apps/server/src/agent/revise-open-decision-1.test.ts+167 −0
apps/server/src/agent/revise-open-decision-2.test.ts+129 −0
apps/server/src/agent/revise-open-decision-3.test.ts+87 −0
apps/server/src/agent/revise-open-decision-4.test.ts+86 −0
apps/server/src/agent/revise-open-decision-5.test.ts+113 −0
apps/server/src/agent/revise-open-decision-requests.test.ts+124 −0
apps/server/src/agent/revise-open-decision.test-fixtures.ts+58 −0
apps/server/src/agent/revise-open-decision.ts+69 −0
apps/server/src/agent/revise-requests.ts+90 −0
apps/server/src/agent/scoped-prose-tool.ts+37 −0
apps/server/src/agent/scoped-refine-tool.ts+80 −0
apps/server/src/agent/scoped-request-boundary.test.ts+47 −0
apps/server/src/agent/scoped-revise-tool.ts+53 −0
apps/server/src/agent/scoped-tool-result.ts+19 −0
apps/server/src/agent/scoped-tools.test-bridge.ts+25 −0
apps/server/src/agent/scoped-tools.test-configuration.ts+86 −0
apps/server/src/agent/scoped-tools.ts+7 −0
apps/server/src/agent/tools.ts+6 −0
apps/server/src/chat/job-authenticated-memory.test-fixtures.ts+97 −0
apps/server/src/chat/job-boundary.test.ts+71 −0
apps/server/src/chat/job-card-memory.test-fixtures.ts+131 −0
apps/server/src/chat/job-card-memory.test.ts+54 −0
apps/server/src/chat/job-fence.ts+20 −0
apps/server/src/chat/job-handoff.test.ts+47 −0
apps/server/src/chat/job-harness.test-fixtures.ts+68 −0
apps/server/src/chat/job-heading-fencing.test.ts+134 −0
apps/server/src/chat/job-heading-harness.test-fixtures.ts+100 −0
apps/server/src/chat/job-heading-memory.test-fixtures.ts+69 −0
apps/server/src/chat/job-heading-memory.test.ts+75 −0
apps/server/src/chat/job-lifecycle.test.ts+77 −0
apps/server/src/chat/job-notice.test.ts+26 −0
apps/server/src/chat/job-profiles.test.ts+110 −0
apps/server/src/chat/job-prompt-card.test-fixtures.ts+145 −0
apps/server/src/chat/job-prompt-prose.test.ts+176 −0
apps/server/src/chat/job-prompt-scripted-harness.test-fixtures.ts+156 −0
apps/server/src/chat/job-prompt-scripted-harness.test.ts+150 −0
apps/server/src/chat/job-prompt-suggest.test.ts+146 −0
apps/server/src/chat/job-queue.test.ts+83 −0
apps/server/src/chat/job-queue.ts+152 −0
apps/server/src/chat/job-scripted-harness.test-fixtures.ts+122 −0
apps/server/src/chat/job-scripted-harness.test.ts+185 −0
apps/server/src/chat/job-signal.test.ts+56 −0
apps/server/src/chat/job-stream.test-fixtures.ts+109 −0
apps/server/src/chat/job-tools.test.ts+96 −0
apps/server/src/chat/job-translate.ts+67 −0
apps/server/src/chat/job.test-fixtures.ts+58 −0
apps/server/src/chat/job.test.ts+95 −0
apps/server/src/chat/notice-idempotency.test.ts+87 −0
apps/server/src/chat/notice-persistence.test.ts+140 −0
apps/server/src/chat/notice-publication.test.ts+59 −0
apps/server/src/chat/notice.test-fixtures.ts+39 −0
apps/server/src/chat/notices.ts+125 −0
apps/server/src/chat/service.ts+205 −42
apps/server/src/config-conversation-bounds.test.ts+44 −0
apps/server/src/config-conversation.test-fixtures.ts+46 −0
apps/server/src/config-conversation.test.ts+32 −0
apps/server/src/config.test.ts+5 −0
apps/server/src/config.ts+27 −0
apps/server/src/conversation-plan/accepted-research-close.test.ts+76 −0
apps/server/src/conversation-plan/accepted-research-commit.test.ts+63 −0
apps/server/src/conversation-plan/accepted-research-gates.test.ts+79 −0
apps/server/src/conversation-plan/accepted-research-memory.test.ts+80 −0
apps/server/src/conversation-plan/accepted-research-socket.test-fixtures.ts+41 −0
apps/server/src/conversation-plan/accepted-research-storage.test-fixtures.ts+55 −0
apps/server/src/conversation-plan/accepted-research.test-fixtures.ts+135 −0
apps/server/src/conversation-plan/accepted-research.ts+79 −0
apps/server/src/conversation-plan/card-effect-prompts.ts+107 −0
apps/server/src/conversation-plan/card-effect-scoped.ts+116 −0
apps/server/src/conversation-plan/card-effect-suggestion.ts+50 −0
apps/server/src/conversation-plan/card-effect-targets.ts+91 −0
apps/server/src/conversation-plan/card-mirror-runner.ts+43 −0
apps/server/src/conversation-plan/card-mirror.ts+62 −0
apps/server/src/conversation-plan/card-prompts.ts+42 −0
apps/server/src/conversation-plan/cards-1.test.ts+143 −0
apps/server/src/conversation-plan/cards-2.test.ts+134 −0
apps/server/src/conversation-plan/cards-3.test.ts+207 −0
apps/server/src/conversation-plan/cards-4.test.ts+157 −0
apps/server/src/conversation-plan/cards-5.test.ts+145 −0
apps/server/src/conversation-plan/cards-6.test.ts+181 −0
apps/server/src/conversation-plan/cards-7.test.ts+223 −0
apps/server/src/conversation-plan/cards-8.test.ts+172 −0
apps/server/src/conversation-plan/cards-9.test.ts+105 −0
apps/server/src/conversation-plan/cards-domain-agreement.test.ts+215 −0
apps/server/src/conversation-plan/cards-domain-restore.test.ts+180 −0
apps/server/src/conversation-plan/cards-domain.test-fixtures.ts+80 −0
apps/server/src/conversation-plan/cards-domain.test.ts+172 −0
apps/server/src/conversation-plan/cards.test-fixtures.ts+194 −0
apps/server/src/conversation-plan/cards.ts+35 −0
apps/server/src/conversation-plan/command-correction-memory.test-fixtures.ts+66 −0
apps/server/src/conversation-plan/command-correction-memory.test.ts+118 −0
apps/server/src/conversation-plan/commands.ts+130 −0
apps/server/src/conversation-plan/correction-validation.ts+90 −0
apps/server/src/conversation-plan/corrections-contributions.test.ts+112 −0
apps/server/src/conversation-plan/corrections-excerpts.test.ts+108 −0
apps/server/src/conversation-plan/corrections.test-fixtures.ts+128 −0
apps/server/src/conversation-plan/corrections.test.ts+161 −0
apps/server/src/conversation-plan/domain-analysis.test.ts+82 −0
apps/server/src/conversation-plan/domain-analysis.ts+97 −0
apps/server/src/conversation-plan/domain-corrections.test.ts+182 −0
apps/server/src/conversation-plan/domain-corrections.ts+135 −0
apps/server/src/conversation-plan/domain-initial.ts+15 −0
apps/server/src/conversation-plan/domain-research.ts+88 −0
apps/server/src/conversation-plan/domain.test-fixtures.ts+60 −0
apps/server/src/conversation-plan/domain.test.ts+213 −0
apps/server/src/conversation-plan/domain.ts+6 −0
apps/server/src/conversation-plan/effect-fields.ts+35 −0
apps/server/src/conversation-plan/effect-outbox.ts+164 −0
apps/server/src/conversation-plan/effect-projection.ts+261 −0
apps/server/src/conversation-plan/effect-runner.ts+110 −0
apps/server/src/conversation-plan/effect-types.ts+104 −0
apps/server/src/conversation-plan/effects-interpretation.test.ts+90 −0
apps/server/src/conversation-plan/effects-outbox.test.ts+87 −0
apps/server/src/conversation-plan/effects-projection.test.ts+180 −0
apps/server/src/conversation-plan/effects-retry.test.ts+99 −0
apps/server/src/conversation-plan/effects-runner.test.ts+215 −0
apps/server/src/conversation-plan/effects-scoped.test.ts+75 −0
apps/server/src/conversation-plan/effects-settlement.test.ts+137 −0
apps/server/src/conversation-plan/effects.test-fixtures.ts+136 −0
apps/server/src/conversation-plan/effects.ts+16 −0
apps/server/src/conversation-plan/event-contributions.ts+120 −0
apps/server/src/conversation-plan/event-corrections.ts+111 −0
apps/server/src/conversation-plan/event-lifecycle.ts+129 −0
apps/server/src/conversation-plan/event-settlement.ts+160 −0
apps/server/src/conversation-plan/event-support.test.ts+159 −0
apps/server/src/conversation-plan/event-support.ts+69 −0
apps/server/src/conversation-plan/event-validation.ts+304 −0
apps/server/src/conversation-plan/events.test.ts+280 −0
apps/server/src/conversation-plan/events.ts+110 −0
apps/server/src/conversation-plan/interpret-batch.test.ts+62 −0
apps/server/src/conversation-plan/interpret-order.test.ts+41 −0
apps/server/src/conversation-plan/interpret-research.ts+84 −0
apps/server/src/conversation-plan/interpret-scoring.ts+23 −0
apps/server/src/conversation-plan/interpret-source.test.ts+69 −0
apps/server/src/conversation-plan/interpret-targeting.test.ts+113 −0
apps/server/src/conversation-plan/interpret-types.ts+31 −0
apps/server/src/conversation-plan/interpret.test-fixtures.ts+141 −0
apps/server/src/conversation-plan/interpret.ts+210 −0
apps/server/src/conversation-plan/jev.test.ts+248 −0
apps/server/src/conversation-plan/jev.ts+252 −0
apps/server/src/conversation-plan/job-context.test.ts+326 −0
apps/server/src/conversation-plan/job-context.ts+162 −0
apps/server/src/conversation-plan/job-prompts-sources.test.ts+114 −0
apps/server/src/conversation-plan/job-prompts.test.ts+115 −0
apps/server/src/conversation-plan/job-prompts.ts+186 −0
apps/server/src/conversation-plan/job-scripted-refine-retry.test-fixtures.ts+172 −0
apps/server/src/conversation-plan/job-scripted-refine-retry.test.ts+230 −0
apps/server/src/conversation-plan/jobs-restore.test.ts+104 −0
apps/server/src/conversation-plan/jobs-validation.test.ts+91 −0
apps/server/src/conversation-plan/jobs.test-fixtures.ts+5 −0
apps/server/src/conversation-plan/jobs.test.ts+159 −0
apps/server/src/conversation-plan/jobs.ts+189 −0
apps/server/src/conversation-plan/option-admission.test.ts+530 −0
apps/server/src/conversation-plan/option-capacity.ts+106 −0
apps/server/src/conversation-plan/pipeline-commitment-ownership.test.ts+77 −0
apps/server/src/conversation-plan/pipeline-commitment-pending.test.ts+103 −0
apps/server/src/conversation-plan/pipeline-commitment-reason.test.ts+121 −0
apps/server/src/conversation-plan/pipeline-commitment-triage.test.ts+81 −0
apps/server/src/conversation-plan/pipeline-commitment.test-fixtures.ts+31 −0
apps/server/src/conversation-plan/pipeline-commitment.test.ts+108 −0
apps/server/src/conversation-plan/pipeline-contrast.test-fixtures.ts+98 −0
apps/server/src/conversation-plan/pipeline-final-contrast-options.test.ts+78 −0
apps/server/src/conversation-plan/pipeline-final-dual-role.test.ts+91 −0
apps/server/src/conversation-plan/pipeline-final-scoped-agreement.test.ts+74 −0
apps/server/src/conversation-plan/pipeline-final-scoped-conditional.test.ts+103 −0
apps/server/src/conversation-plan/pipeline-final-scoped-duplicate.test.ts+123 −0
apps/server/src/conversation-plan/pipeline-final-scoped-proposal.test.ts+114 −0
apps/server/src/conversation-plan/pipeline-final-scoped-refusals.test.ts+65 −0
apps/server/src/conversation-plan/pipeline-final-scoped-stance.test.ts+111 −0
apps/server/src/conversation-plan/pipeline-final-scoped-standalone.test.ts+73 −0
apps/server/src/conversation-plan/pipeline-lifecycle-1.test.ts+76 −0
apps/server/src/conversation-plan/pipeline-lifecycle-2.test.ts+77 −0
apps/server/src/conversation-plan/pipeline-lifecycle-3.test.ts+88 −0
apps/server/src/conversation-plan/pipeline-lifecycle.test-fixtures.ts+31 −0
apps/server/src/conversation-plan/pipeline-linked-card-resolution.test.ts+107 −0
apps/server/src/conversation-plan/pipeline-linked-card.test.ts+68 −0
apps/server/src/conversation-plan/pipeline-linked-option.test-fixtures.ts+22 −0
apps/server/src/conversation-plan/pipeline-option-1.test.ts+92 −0
apps/server/src/conversation-plan/pipeline-option-2.test.ts+123 −0
apps/server/src/conversation-plan/pipeline-option-3.test.ts+104 −0
apps/server/src/conversation-plan/pipeline-option-4.test.ts+99 −0
apps/server/src/conversation-plan/pipeline-option-5.test.ts+129 −0
apps/server/src/conversation-plan/pipeline-ordinary-save-competing.test.ts+125 −0
apps/server/src/conversation-plan/pipeline-ordinary-save-pending.test-fixtures.ts+60 −0
apps/server/src/conversation-plan/pipeline-ordinary-save.test-fixtures.ts+140 −0
apps/server/src/conversation-plan/pipeline-ordinary-save.test.ts+134 −0
apps/server/src/conversation-plan/pipeline-provenance-1.test.ts+118 −0
apps/server/src/conversation-plan/pipeline-provenance-2.test.ts+101 −0
apps/server/src/conversation-plan/pipeline-provenance-3.test.ts+118 −0
apps/server/src/conversation-plan/pipeline-provenance-4.test.ts+93 −0
apps/server/src/conversation-plan/pipeline-recommendation-1.test.ts+65 −0
apps/server/src/conversation-plan/pipeline-recommendation-2.test.ts+61 −0
apps/server/src/conversation-plan/pipeline-recommendation-3.test.ts+117 −0
apps/server/src/conversation-plan/pipeline-recommendation-4.test.ts+104 −0
apps/server/src/conversation-plan/pipeline-recommendation-5.test.ts+87 −0
apps/server/src/conversation-plan/pipeline-recommendation-6.test.ts+78 −0
apps/server/src/conversation-plan/pipeline-recommendation-7.test.ts+78 −0
apps/server/src/conversation-plan/pipeline-recovery-alternatives.test.ts+91 −0
apps/server/src/conversation-plan/pipeline-recovery-ambiguity.test.ts+51 −0
apps/server/src/conversation-plan/pipeline-recovery-effects.test.ts+135 −0
apps/server/src/conversation-plan/pipeline-recovery-ownership.test.ts+86 −0
apps/server/src/conversation-plan/pipeline-recovery-refusal.test.ts+51 −0
apps/server/src/conversation-plan/pipeline-recovery-repeat.test.ts+123 −0
apps/server/src/conversation-plan/pipeline-recovery-unique.test.ts+76 −0
apps/server/src/conversation-plan/pipeline-recovery.test-fixtures.ts+172 −0
apps/server/src/conversation-plan/pipeline-reply-boundary.test.ts+49 −0
apps/server/src/conversation-plan/pipeline-reply-dense.test.ts+100 −0
apps/server/src/conversation-plan/pipeline-reply-limits.test.ts+63 −0
apps/server/src/conversation-plan/pipeline-reply-named.test.ts+92 −0
apps/server/src/conversation-plan/pipeline-reply-options.test.ts+107 −0
apps/server/src/conversation-plan/pipeline-reply-restore.test.ts+64 −0
apps/server/src/conversation-plan/pipeline-reply-unsafe.test.ts+117 −0
apps/server/src/conversation-plan/pipeline-reply.test-fixtures.ts+25 −0
apps/server/src/conversation-plan/pipeline-scoped.test-fixtures.ts+154 −0
apps/server/src/conversation-plan/pipeline-source-fallback.test.ts+186 −0
apps/server/src/conversation-plan/pipeline-source-opening.test.ts+36 −0
apps/server/src/conversation-plan/pipeline-source-quotes.test.ts+118 −0
apps/server/src/conversation-plan/pipeline-source-recovery.test.ts+63 −0
apps/server/src/conversation-plan/pipeline-source-targeting.test.ts+111 −0
apps/server/src/conversation-plan/planner-job-interruption.ts+47 −0
apps/server/src/conversation-plan/planner-job-support.ts+82 −0
apps/server/src/conversation-plan/planner-job-types.ts+36 −0
apps/server/src/conversation-plan/planner-jobs-completion.test.ts+122 −0
apps/server/src/conversation-plan/planner-jobs-failure.test.ts+114 −0
apps/server/src/conversation-plan/planner-jobs-interruption.test.ts+133 −0
apps/server/src/conversation-plan/planner-jobs-memory-failure.test.ts+88 −0
apps/server/src/conversation-plan/planner-jobs-memory.test-fixtures.ts+142 −0
apps/server/src/conversation-plan/planner-jobs-memory.test.ts+78 −0
apps/server/src/conversation-plan/planner-jobs-receipt-failure.test.ts+60 −0
apps/server/src/conversation-plan/planner-jobs-receipt.test.ts+109 −0
apps/server/src/conversation-plan/planner-jobs-retry.test.ts+130 −0
apps/server/src/conversation-plan/planner-jobs.test-fixtures.ts+88 −0
apps/server/src/conversation-plan/planner-jobs.test.ts+125 −0
apps/server/src/conversation-plan/planner-jobs.ts+231 −0
apps/server/src/conversation-plan/policy-D19-fourth-candidate.test.ts+123 −0
apps/server/src/conversation-plan/policy-candidate-agreement.test.ts+48 −0
apps/server/src/conversation-plan/policy-candidate-agreement.ts+47 −0
apps/server/src/conversation-plan/policy-candidate-application-deferral.test.ts+76 −0
apps/server/src/conversation-plan/policy-candidate-application-failures.test.ts+24 −0
apps/server/src/conversation-plan/policy-candidate-application.test-fixtures.ts+91 −0
apps/server/src/conversation-plan/policy-candidate-application.test.ts+111 −0
apps/server/src/conversation-plan/policy-candidate-application.ts+119 −0
apps/server/src/conversation-plan/policy-candidate-contribution.test-fixtures.ts+51 −0
apps/server/src/conversation-plan/policy-candidate-contribution.test.ts+191 −0
apps/server/src/conversation-plan/policy-candidate-contribution.ts+89 −0
apps/server/src/conversation-plan/policy-candidate-entry.test-fixtures.ts+38 −0
apps/server/src/conversation-plan/policy-candidate-entry.test.ts+90 −0
apps/server/src/conversation-plan/policy-candidate-entry.ts+89 −0
apps/server/src/conversation-plan/policy-candidate-factories.test.ts+82 −0
apps/server/src/conversation-plan/policy-candidate-factories.ts+38 −0
apps/server/src/conversation-plan/policy-candidate-new-choice.test.ts+61 −0
apps/server/src/conversation-plan/policy-candidate-new-choice.ts+73 −0
apps/server/src/conversation-plan/policy-candidate-ordinary.test-fixtures.ts+68 −0
apps/server/src/conversation-plan/policy-candidate-question.test.ts+68 −0
apps/server/src/conversation-plan/policy-candidate-question.ts+48 −0
apps/server/src/conversation-plan/policy-candidate-reopening.test.ts+32 −0
apps/server/src/conversation-plan/policy-candidate-reopening.ts+47 −0
apps/server/src/conversation-plan/policy-candidate-resolution-materialization.test.ts+27 −0
apps/server/src/conversation-plan/policy-candidate-resolution.test-fixtures.ts+38 −0
apps/server/src/conversation-plan/policy-candidate-resolution.test.ts+147 −0
apps/server/src/conversation-plan/policy-candidate-resolution.ts+107 −0
apps/server/src/conversation-plan/policy-candidate-role.test.ts+205 −0
apps/server/src/conversation-plan/policy-candidate-role.ts+191 −0
apps/server/src/conversation-plan/policy-candidate-scoped.test-fixtures.ts+119 −0
apps/server/src/conversation-plan/policy-candidate-scoped.test.ts+148 −0
apps/server/src/conversation-plan/policy-candidate-scoped.ts+141 −0
apps/server/src/conversation-plan/policy-candidate-setup.test.ts+240 −0
apps/server/src/conversation-plan/policy-candidate-setup.ts+96 −0
apps/server/src/conversation-plan/policy-candidate-stance-scoped.test.ts+92 −0
apps/server/src/conversation-plan/policy-candidate-stance.test-fixtures.ts+107 −0
apps/server/src/conversation-plan/policy-candidate-stance.test.ts+175 −0
apps/server/src/conversation-plan/policy-candidate-stance.ts+121 −0
apps/server/src/conversation-plan/policy-candidate-verification.test-fixtures.ts+65 −0
apps/server/src/conversation-plan/policy-candidate-verification.test.ts+95 −0
apps/server/src/conversation-plan/policy-candidate-verification.ts+80 −0
apps/server/src/conversation-plan/policy-candidate-withdrawal.test.ts+68 −0
apps/server/src/conversation-plan/policy-candidate-withdrawal.ts+51 −0
apps/server/src/conversation-plan/policy-candidate.test-fixtures.ts+64 −0
apps/server/src/conversation-plan/policy-compound.ts+187 −0
apps/server/src/conversation-plan/policy-context.ts+96 −0
apps/server/src/conversation-plan/policy-cues.ts+45 −0
apps/server/src/conversation-plan/policy-declarative.test.ts+223 −0
apps/server/src/conversation-plan/policy-declarative.ts+108 −0
apps/server/src/conversation-plan/policy-direct-alternatives.ts+83 −0
apps/server/src/conversation-plan/policy-direct-recovery.test.ts+144 −0
apps/server/src/conversation-plan/policy-direct-recovery.ts+125 −0
apps/server/src/conversation-plan/policy-dispatcher.test-fixtures.ts+52 −0
apps/server/src/conversation-plan/policy-dispatcher.test.ts+137 −0
apps/server/src/conversation-plan/policy-explicit-list.test.ts+256 −0
apps/server/src/conversation-plan/policy-final.test.ts+60 −0
apps/server/src/conversation-plan/policy-final.ts+64 −0
apps/server/src/conversation-plan/policy-identity.test.ts+19 −0
apps/server/src/conversation-plan/policy-identity.ts+47 −0
apps/server/src/conversation-plan/policy-initial-terminals.test.ts+108 −0
apps/server/src/conversation-plan/policy-initial-terminals.ts+28 −0
apps/server/src/conversation-plan/policy-initial.test-fixtures.ts+157 −0
apps/server/src/conversation-plan/policy-proposal.ts+36 −0
apps/server/src/conversation-plan/policy-purpose-question.ts+100 −0
apps/server/src/conversation-plan/policy-remaining-terminals.test.ts+157 −0
apps/server/src/conversation-plan/policy-remaining-terminals.ts+22 −0
apps/server/src/conversation-plan/policy-scoring.ts+62 −0
apps/server/src/conversation-plan/policy-terminal.test-fixtures.ts+177 −0
apps/server/src/conversation-plan/policy-topic.test.ts+156 −0
apps/server/src/conversation-plan/policy-types.ts+23 −0
apps/server/src/conversation-plan/policy.ts+80 −0
apps/server/src/conversation-plan/preference.ts+94 −0
apps/server/src/conversation-plan/processor-card-context.ts+33 −0
apps/server/src/conversation-plan/processor-commands.ts+185 −0
apps/server/src/conversation-plan/processor-fields.ts+48 −0
apps/server/src/conversation-plan/processor-outbox.ts+99 −0
apps/server/src/conversation-plan/processor-research-admission.ts+125 −0
apps/server/src/conversation-plan/processor-research-consent.ts+90 −0
apps/server/src/conversation-plan/processor-research-quotes.ts+96 −0
apps/server/src/conversation-plan/processor-run.ts+199 −0
apps/server/src/conversation-plan/processor-scoped-save.ts+115 −0
apps/server/src/conversation-plan/processor-types.ts+43 −0
apps/server/src/conversation-plan/prompt-scripted-harness.test.ts+244 −0
apps/server/src/conversation-plan/prose-job-anchor.test.ts+150 −0
apps/server/src/conversation-plan/prose-job.test-fixtures.ts+19 −0
apps/server/src/conversation-plan/prose-job.test.ts+70 −0
apps/server/src/conversation-plan/prose-job.ts+122 −0
apps/server/src/conversation-plan/question-builder.test-fixtures.ts+75 −0
apps/server/src/conversation-plan/question-context.ts+160 −0
apps/server/src/conversation-plan/question-interpreter.test.ts+118 −0
apps/server/src/conversation-plan/question-research.ts+123 −0
apps/server/src/conversation-plan/question-shared.ts+31 −0
apps/server/src/conversation-plan/question-targeting.ts+322 −0
apps/server/src/conversation-plan/question-triage.ts+210 −0
apps/server/src/conversation-plan/questions-duplicates.test.ts+163 −0
apps/server/src/conversation-plan/questions-targeting.test.ts+67 −0
apps/server/src/conversation-plan/questions.test.ts+63 −0
apps/server/src/conversation-plan/questions.ts+24 −0
apps/server/src/conversation-plan/quote-budget.ts+7 −0
apps/server/src/conversation-plan/quotes.test-fixtures.ts+21 −0
apps/server/src/conversation-plan/quotes.test.ts+106 −0
apps/server/src/conversation-plan/quotes.ts+337 −0
apps/server/src/conversation-plan/recent-thread-context.test.ts+168 −0
apps/server/src/conversation-plan/refined-option-policy.test.ts+79 −0
apps/server/src/conversation-plan/research-commands.ts+108 −0
apps/server/src/conversation-plan/research-offer-detection-card-focus.test.ts+242 −0
apps/server/src/conversation-plan/research-offer-detection-comparison-guards.test.ts+351 −0
apps/server/src/conversation-plan/research-offer-detection-concern-guards.test.ts+257 −0
apps/server/src/conversation-plan/research-offer-detection-positive.test.ts+282 −0
apps/server/src/conversation-plan/research-offer-detection.test-fixtures.ts+348 −0
apps/server/src/conversation-plan/research-offers-comparison.test.ts+178 −0
apps/server/src/conversation-plan/research-offers-concern.test.ts+161 −0
apps/server/src/conversation-plan/research-offers.test-fixtures.ts+185 −0
apps/server/src/conversation-plan/research-offers.test.ts+139 −0
apps/server/src/conversation-plan/research-snapshots.ts+91 −0
apps/server/src/conversation-plan/research-validation.test.ts+153 −0
apps/server/src/conversation-plan/research-validation.ts+174 −0
apps/server/src/conversation-plan/review-analysis.test.ts+64 −0
apps/server/src/conversation-plan/review.test-fixtures.ts+100 −0
apps/server/src/conversation-plan/review.test.ts+176 −0
apps/server/src/conversation-plan/runtime-acceptance.test.ts+85 −0
apps/server/src/conversation-plan/runtime-card.test.ts+132 −0
apps/server/src/conversation-plan/runtime-lifecycle.test.ts+179 −0
apps/server/src/conversation-plan/runtime-save.test.ts+188 −0
apps/server/src/conversation-plan/runtime.ts+187 −0
apps/server/src/conversation-plan/save-command.test.ts+180 −0
apps/server/src/conversation-plan/save-command.ts+59 −0
apps/server/src/conversation-plan/scoped-save-validation.test.ts+185 −0
apps/server/src/conversation-plan/scripted-environment.test.ts+170 −0
apps/server/src/conversation-plan/scripted-harness.test-driver.ts+200 −0
apps/server/src/conversation-plan/scripted-harness.test.ts+108 −0
apps/server/src/conversation-plan/scripted-network.test.ts+242 −0
apps/server/src/conversation-plan/scripted-runner.test-chat.ts+26 −0
apps/server/src/conversation-plan/scripted-runner.test.ts+144 −0
apps/server/src/conversation-plan/scripted-runner.ts+110 −0
apps/server/src/conversation-plan/scripted-script.test.ts+84 −0
apps/server/src/conversation-plan/scripted-script.ts+79 −0
apps/server/src/conversation-plan/service-correction.test-fixtures.ts+169 −0
apps/server/src/conversation-plan/service-corrections.test.ts+131 −0
apps/server/src/conversation-plan/service-effect-commit.test.ts+158 −0
apps/server/src/conversation-plan/service-effect-retry.test.ts+179 −0
apps/server/src/conversation-plan/service-inference.test.ts+218 −0
apps/server/src/conversation-plan/service-legacy-withdrawal.test.ts+90 −0
apps/server/src/conversation-plan/service-memory-failure.test.ts+87 −0
apps/server/src/conversation-plan/service-memory.test-fixtures.ts+112 −0
apps/server/src/conversation-plan/service-memory.test.ts+87 −0
apps/server/src/conversation-plan/service-mirror-race.test.ts+159 −0
apps/server/src/conversation-plan/service-opening-memory.test-fixtures.ts+66 −0
apps/server/src/conversation-plan/service-opening-memory.test.ts+337 −0
apps/server/src/conversation-plan/service-opening-order-memory.test.ts+290 −0
apps/server/src/conversation-plan/service-opening.test.ts+236 −0
apps/server/src/conversation-plan/service-opening.ts+111 −0
apps/server/src/conversation-plan/service-order.test.ts+56 −0
apps/server/src/conversation-plan/service-queue.test.ts+242 −0
apps/server/src/conversation-plan/service-scoped-save.test.ts+98 −0
apps/server/src/conversation-plan/service-scoped-stale.test.ts+107 −0
apps/server/src/conversation-plan/service-scoped-support.test.ts+179 −0
apps/server/src/conversation-plan/service-scoped.test-fixtures.ts+212 −0
apps/server/src/conversation-plan/service.test-fixtures.ts+146 −0
apps/server/src/conversation-plan/service.ts+115 −0
apps/server/src/conversation-plan/sources.test.ts+135 −0
apps/server/src/conversation-plan/sources.ts+67 −0
apps/server/src/conversation-plan/state-provenance.ts+53 −0
apps/server/src/conversation-plan/state-restoration.ts+72 −0
apps/server/src/conversation-plan/state-validation.test.ts+237 −0
apps/server/src/conversation-plan/state-validation.ts+265 −0
apps/server/src/conversation-plan/validation-fields.ts+54 −0
apps/server/src/conversation-plan/validation.test.ts+342 −0
apps/server/src/conversation-plan/validation.ts+17 −0
apps/server/src/harness/agents.ts+30 −15
apps/server/src/harness/session.ts+27 −2
apps/server/src/harness/tool-names.ts+18 −0
apps/server/src/main.ts+298 −60
apps/server/src/mcp/update-lifecycle.test.ts+1 −1
apps/server/src/plan/card-answer-projection.test.ts+91 −0
apps/server/src/plan/card-lifecycle-projection.test.ts+80 −0
apps/server/src/plan/card-option-projection.test.ts+51 −0
apps/server/src/plan/card-projections.test-fixtures.ts+12 −0
apps/server/src/plan/card-projections.ts+152 −0
apps/server/src/plan/card-prompt-projection.test.ts+37 −0
apps/server/src/plan/conversation-analysis-persistence.test.ts+123 −0
apps/server/src/plan/conversation-option-persistence.test.ts+110 −0
apps/server/src/plan/conversation-outbox-persistence.test.ts+113 −0
apps/server/src/plan/conversation-persistence.test-fixtures.ts+35 −0
apps/server/src/plan/conversation-processor-persistence.test.ts+35 −0
apps/server/src/plan/notice-validation.ts+149 −0
apps/server/src/plan/persistence.test.ts+10 −8
apps/server/src/plan/planner-jobs-failure.test.ts+68 −0
apps/server/src/plan/planner-jobs-restoration.test.ts+80 −0
apps/server/src/plan/planner-jobs.test-fixtures.ts+23 −0
apps/server/src/plan/planner-jobs.test.ts+72 −0
apps/server/src/plan/projection-submit.test-fixtures.ts+88 −0
apps/server/src/plan/projections.test.ts+80 −0
apps/server/src/plan/projections.ts+90 −0
apps/server/src/plan/protected-projection.test-fixtures.ts+111 −0
apps/server/src/plan/protected-projection.test.ts+149 −0
apps/server/src/plan/question-record-persistence.test.ts+176 −0
apps/server/src/plan/question-record-sources.test.ts+130 −0
apps/server/src/plan/question-record.test-fixtures.ts+55 −0
apps/server/src/plan/questionnaires.ts+7 −1
apps/server/src/plan/research-placement-1.test.ts+39 −0
apps/server/src/plan/research-placement-2.test.ts+57 −0
apps/server/src/plan/research-placement.test-fixtures.ts+24 −0
apps/server/src/plan/research-projection-authority.test.ts+117 −0
apps/server/src/plan/research-projection-jobs.test-fixtures.ts+101 −0
apps/server/src/plan/research-projection-lifecycle.test.ts+79 −0
apps/server/src/plan/research-projection-race.test.ts+67 −0
apps/server/src/plan/research-projection.test-fixtures.ts+52 −0
apps/server/src/plan/room.ts+160 −45
apps/server/src/plan/service.ts+458 −67
apps/server/src/plan/staged-publication-guards.test.ts+54 −0
apps/server/src/plan/staged-publication.test-fixtures.ts+25 −0
apps/server/src/plan/staged-publication.test.ts+73 −0
apps/server/src/question-service-deferral.test-fixtures.ts+111 −0
apps/server/src/question-service.test-fixtures.ts+120 −0
apps/server/src/questions-service-durability-1.test.ts+174 −0
apps/server/src/questions-service-durability-2.test.ts+156 −0
apps/server/src/questions-service-durability-3.test.ts+213 −0
apps/server/src/questions-service-durability-4.test.ts+217 −0
apps/server/src/questions-service-durability-5.test.ts+194 −0
apps/server/src/questions-service-durability-6.test.ts+167 −0
apps/server/src/questions-service-durability-7.test.ts+170 −0
apps/server/src/questions-service-durability-8.test.ts+223 −0
apps/server/src/questions-service-durability-9.test.ts+102 −0
apps/server/src/questions.anchors.test.ts+1 −1
apps/server/src/questions.service.test.ts+22 −57
apps/server/src/questions/anchors.test.ts+4 −0
apps/server/src/questions/backfill-implementation.test.ts+79 −0
apps/server/src/questions/backfill.test.ts+256 −0
apps/server/src/questions/backfill.ts+142 −0
apps/server/src/questions/card-actions.test.ts+109 −0
apps/server/src/questions/card-actions.ts+159 −0
apps/server/src/questions/card-event.ts+13 −0
apps/server/src/questions/card-insertion.ts+133 −0
apps/server/src/questions/card-involved.ts+37 −0
apps/server/src/questions/card-notifications.ts+82 −0
apps/server/src/questions/card-option-relabel.ts+163 −0
apps/server/src/questions/card-planner-revision.ts+145 −0
apps/server/src/questions/card-reopen-1.test.ts+211 −0
apps/server/src/questions/card-reopen-2.test.ts+147 −0
apps/server/src/questions/card-reopen.test-fixtures.ts+110 −0
apps/server/src/questions/card-retitle.ts+93 −0
apps/server/src/questions/card-server-options.ts+236 −0
apps/server/src/questions/card-suggestions.ts+57 −0
apps/server/src/questions/conversation-capacity.test.ts+314 −0
apps/server/src/questions/conversation-card-1.test.ts+201 −0
apps/server/src/questions/conversation-card-2.test.ts+197 −0
apps/server/src/questions/conversation-card-3.test.ts+214 −0
apps/server/src/questions/conversation-card-4.test.ts+152 −0
apps/server/src/questions/conversation-card-5.test.ts+120 −0
apps/server/src/questions/conversation-card-6.test.ts+171 −0
apps/server/src/questions/conversation-card-7.test.ts+205 −0
apps/server/src/questions/conversation-card-8.test.ts+207 −0
apps/server/src/questions/conversation-card.test-fixtures.ts+130 −0
apps/server/src/questions/decision-anchor-lifecycle.test.ts+100 −0
apps/server/src/questions/option-match.ts+45 −0
apps/server/src/questions/planner-lifecycle-durability.test.ts+242 −0
apps/server/src/questions/prose-1.test.ts+211 −0
apps/server/src/questions/prose-2.test.ts+179 −0
apps/server/src/questions/prose-3.test.ts+135 −0
apps/server/src/questions/prose.test-fixtures.ts+50 −0
apps/server/src/questions/prose.ts+60 −0
apps/server/src/questions/question-option-source-1.test.ts+202 −0
apps/server/src/questions/question-option-source-2.test.ts+56 −0
apps/server/src/questions/question-option-source.test-fixtures.ts+106 −0
apps/server/src/questions/record-fields.ts+31 −0
apps/server/src/questions/record-provenance.ts+45 −0
apps/server/src/questions/record-types.ts+39 −0
apps/server/src/questions/record-validation.ts+162 −0
apps/server/src/questions/records.bounds.test.ts+48 −0
apps/server/src/questions/records.reopen.test.ts+182 −0
apps/server/src/questions/records.ts+80 −0
apps/server/src/questions/service-append-option.ts+188 −0
apps/server/src/questions/service-ask.ts+179 −0
apps/server/src/questions/service-cancel.ts+140 −0
apps/server/src/questions/service-definition.ts+71 −0
apps/server/src/questions/service-discard.ts+143 −0
apps/server/src/questions/service-draft.ts+117 −0
apps/server/src/questions/service-relationships.ts+128 −0
apps/server/src/questions/service-reopen.ts+216 −0
apps/server/src/questions/service-submit.ts+222 −0
apps/server/src/questions/service.ts+37 −674
apps/server/src/questions/store-edit.test.ts+38 −0
apps/server/src/questions/store-lifecycle.ts+27 −0
apps/server/src/questions/store-options.test.ts+77 −0
apps/server/src/questions/store-options.ts+167 −0
apps/server/src/questions/store-reopen.test.ts+29 −0
apps/server/src/questions/store-restore.test.ts+72 −0
apps/server/src/questions/store-retitle.test.ts+78 −0
apps/server/src/questions/store-suggestion-queue.test.ts+89 −0
apps/server/src/questions/store-suggestion-state.test.ts+120 −0
apps/server/src/questions/store-suggestion-submit.test.ts+58 −0
apps/server/src/questions/store-suggestions.ts+50 −0
apps/server/src/questions/store-types.ts+59 −0
apps/server/src/questions/store.test-fixtures.ts+32 −0
apps/server/src/questions/store.ts+73 −61
apps/server/src/questions/write-prose.test.ts+152 −0
apps/server/src/questions/write-prose.ts+91 −0
apps/server/src/research/inline-1.test.ts+136 −0
apps/server/src/research/inline-2.test.ts+135 −0
apps/server/src/research/inline-3.test.ts+139 −0
apps/server/src/research/inline-4.test.ts+64 −0
apps/server/src/research/inline-memory.test.ts+90 −0
apps/server/src/research/inline.test-fixtures.ts+77 −0
apps/server/src/research/placement-close.test-fixtures.ts+164 −0
apps/server/src/research/placement-close.test.ts+22 −0
apps/server/src/research/placement.test.ts+57 −0
apps/server/src/research/placement.ts+30 −0
apps/server/src/research/service.test.ts+1 −32
apps/server/src/research/service.ts+239 −45
apps/server/src/research/start-identity.ts+49 −0
apps/server/src/socket/authorization.test.ts+60 −0
apps/server/src/socket/authorization.ts+26 −0
apps/server/src/storage/contract.ts+4 −22
apps/server/src/storage/memory/adapter.ts+15 −2
apps/server/src/storage/memory/research.ts+87 −1
apps/server/src/storage/model.ts+55 −0
apps/server/src/storage/port.ts+27 −1
apps/server/src/storage/postgres/adapter.test.ts+133 −0
apps/server/src/storage/postgres/adapter.ts+79 −0
apps/server/src/storage/postgres/conversation-restart.test.ts+114 −0
apps/server/src/storage/postgres/migrations.ts+3 −0
apps/server/src/storage/postgres/migrations/015_planner_inline_reference.sql+7 −0
apps/server/src/storage/postgres/research.ts+118 −1
apps/server/src/storage/postgres/startup.test.ts+309 −3
apps/server/src/storage/research-inline-contract-1.ts+124 −0
apps/server/src/storage/research-inline-contract-2.ts+51 −0
apps/server/src/storage/research-inline-contract-3.ts+44 −0
apps/server/src/storage/research-inline-contract-4.ts+53 −0
apps/server/src/storage/research-inline-contract-5.ts+87 −0
apps/server/src/storage/research-inline-contract-6.ts+39 −0
apps/server/src/storage/research-inline-contract-fixtures.ts+23 −0
apps/server/src/storage/research-inline-contract.ts+16 −0
apps/server/src/testing/card-gap-document.ts+25 −0
apps/web/package.json+1 −0
apps/web/src/chat/chat.tsx+34 −1
apps/web/src/chat/decision-entry.test.tsx+267 −0
apps/web/src/chat/decision-entry.tsx+222 −0
apps/web/src/chat/markdown.css+4 −0
apps/web/src/chat/model.test.ts+15 −0
apps/web/src/chat/model.ts+8 −2
apps/web/src/chat/research-offer-observer.test.ts+127 −0
apps/web/src/chat/research-offer-transcript.test.ts+73 −0
apps/web/src/chat/research-offer.test-fixtures.ts+68 −0
apps/web/src/chat/research-offer.test.ts+77 −0
apps/web/src/chat/research-offer.tsx+318 −0
apps/web/src/chat/scoped-choice-entry.test.tsx+156 −0
apps/web/src/chat/scoped-choice-entry.tsx+141 −0
apps/web/src/chat/transcript-decisions.test-fixtures.ts+214 −0
apps/web/src/chat/transcript-decisions.test.tsx+50 −0
apps/web/src/chat/transcript-scoped-choice.test.tsx+75 −0
apps/web/src/chat/transcript-source.test.tsx+54 −0
apps/web/src/chat/transcript.test.tsx+160 −0
apps/web/src/chat/transcript.tsx+239 −14
apps/web/src/conversation-plan/analysis-action.ts+8 −0
apps/web/src/conversation-plan/analysis-labels.ts+32 −0
apps/web/src/conversation-plan/analysis-overview.test.tsx+58 −0
apps/web/src/conversation-plan/analysis-overview.tsx+240 −0
apps/web/src/conversation-plan/announcements.test.ts+168 −0
apps/web/src/conversation-plan/announcements.ts+27 −0
apps/web/src/conversation-plan/card-parts.tsx+29 −0
apps/web/src/conversation-plan/evidence-popover.test.tsx+151 −0
apps/web/src/conversation-plan/evidence-popover.tsx+115 −0
apps/web/src/conversation-plan/evidence.test.ts+247 −0
apps/web/src/conversation-plan/evidence.ts+109 −0
apps/web/src/conversation-plan/excerpt-correction.tsx+226 −0
apps/web/src/conversation-plan/links.test.ts+179 −0
apps/web/src/conversation-plan/links.ts+97 −0
apps/web/src/conversation-plan/markers.test.tsx+181 −0
apps/web/src/conversation-plan/markers.tsx+356 −0
apps/web/src/conversation-plan/planner-job-diagnostics.tsx+80 −0
apps/web/src/conversation-plan/source.css+5 −0
apps/web/src/conversation-plan/source.ts+58 −0
apps/web/src/conversation-plan/store.test.ts+119 −0
apps/web/src/conversation-plan/store.ts+74 −0
apps/web/src/document-workspace-host.tsx+4 −4
apps/web/src/room-workspace.tsx+375 −83
apps/web/src/theme.css+20 −2
apps/web/src/tokens.test.ts+60 −31
apps/web/src/workspace-model.test.ts+6 −8
apps/web/src/workspace-model.ts+1 −1
apps/web/src/workspace.tsx+23 −26
bun.lock+1 −0
compose.yaml+3 −0
docs/architecture.md+8 −8
docs/jev-live-browser-test.md+60 −0
docs/jev-product-extraction.md+173 −0
docs/jev-product-source-map.tsv+288 −0
docs/jev-quality-handoff.md+82 −0
docs/jev-quality-review.md+51 −0
docs/jev-ui-reconciliation.md+59 −0
docs/self-hosting.md+40 −22
e2e/conversation-plan-heading.e2e.ts+44 −0
e2e/conversation-plan-jobs.e2e.ts+269 −0
e2e/conversation-plan-layout.e2e.ts+89 −0
e2e/conversation-plan-prompts.e2e.ts+513 −0
e2e/conversation-plan-runtime.e2e.ts+407 −0
e2e/conversation-plan-stress.e2e.ts+475 −0
e2e/conversation-plan-ui.e2e.ts+534 −0
e2e/conversation-plan.Dockerfile+30 −0
e2e/conversation-plan.Dockerfile.dockerignore+56 −0
e2e/conversation-plan.playwright.config.ts+113 −0
e2e/decision-anchor-stress.e2e.ts+515 −0
e2e/decision-evidence.e2e.ts+407 −0
e2e/decision-marker.e2e.ts+13 −13
e2e/decision-prose.e2e.ts+390 −0
e2e/discarded-mobile-geometry.e2e.ts+36 −0
e2e/document-tab-stability.e2e.ts+75 −0
e2e/editing.e2e.ts+4 −1
e2e/github.ts+17 −0
e2e/harness/scripted-context.ts+45 −0
e2e/harness/scripted-environment.ts+51 −0
e2e/harness/scripted-network-preload.ts+7 −0
e2e/harness/scripted-network.ts+59 −0
e2e/harness/scripted-planner.ts+218 −0
e2e/harness/scripted-preload.ts+31 −0
e2e/harness/scripted-register.test.ts+71 −0
e2e/harness/scripted-register.ts+15 −0
e2e/jev-control.ts+16 −0
e2e/jev-process.ts+85 −0
e2e/jev-wire.ts+90 −0
e2e/jev.ts+378 −0
e2e/planner-jobs.ts+27 −0
e2e/playwright.config.ts+28 −0
e2e/research-child-recovery.e2e.ts+207 −14
e2e/research-child-surface.e2e.ts+8 −1
e2e/research-offer-fixtures.ts+245 −0
e2e/research-offers-ui.e2e.ts+408 −0
e2e/research-offers.e2e.ts+200 −0
e2e/research-recovery-database.ts+312 −0
e2e/responsive-decisions.e2e.ts+19 −4
e2e/responsive-workspace.e2e.ts+164 −44
e2e/shell.e2e.ts+6 −6
e2e/sidecar-card-states.e2e.ts+344 −0
e2e/sidecar-document-spacing.e2e.ts+119 −0
e2e/sidecar-draft-reopen.e2e.ts+110 −0
e2e/sidecar-evidence-absence.e2e.ts+14 −0
e2e/sidecar-navigation.e2e.ts+509 −0
e2e/sidecar-option-async.e2e.ts+179 −0
e2e/sidecar-option-contracts.e2e.ts+286 −0
e2e/sidecar-spacing-database.ts+60 −0
e2e/sidecar.e2e.ts+55 −26
e2e/smoke.e2e.ts+4 −1
e2e/source/analysis-host-linked.native.ts+91 −0
e2e/source/analysis-host-native.ts+98 −0
e2e/source/analysis-host-retries.native.ts+132 −0
e2e/source/analysis-host.fixture.ts+167 −0
e2e/source/analysis-host.native.ts+188 −0
e2e/source/card-gap-native.ts+103 −0
e2e/source/card-gap.fixture.ts+140 −0
e2e/source/card-gap.native.ts+110 −0
e2e/source/collapse-deletion-native.ts+100 −0
e2e/source/collapse-deletion.fixture.ts+148 −0
e2e/source/collapse-deletion.native.ts+201 −0
e2e/source/conversation-announcements.native.ts+318 −0
e2e/source/decision-reader-native.ts+95 −0
e2e/source/decision-reader.fixture.ts+160 −0
e2e/source/decision-reader.native.ts+194 −0
e2e/source/diagnostic-controls.native.ts+76 −0
e2e/source/evidence-hover-native.ts+89 −0
e2e/source/evidence-hover.fixture.ts+103 −0
e2e/source/evidence-hover.native.ts+173 −0
e2e/source/excerpt-correction-lifecycle.native.ts+64 −0
e2e/source/excerpt-correction-native.ts+64 −0
e2e/source/excerpt-correction-retry.native.ts+70 −0
e2e/source/excerpt-correction.fixture.ts+123 −0
e2e/source/open-card-native.ts+177 −0
e2e/source/open-card.fixture.ts+110 −0
e2e/source/open-card.native.ts+136 −0
e2e/source/playwright.config.ts+32 −0
e2e/source/question-actions.native.ts+128 −0
e2e/source/question-terminal-origin.fixture.ts+80 −0
e2e/source/question-terminal-origin.native.ts+199 −0
e2e/source/question-view-contracts.fixture.ts+110 −0
e2e/source/question-view-contracts.native.ts+282 −0
e2e/source/room-source-native.ts+140 −0
e2e/source/room-source.fixture.ts+121 −0
e2e/source/room-source.native.ts+280 −0
e2e/source/source-highlight.native.ts+218 −0
e2e/source/transcript-source.fixture.ts+86 −0
e2e/source/transcript-source.native.ts+178 −0
packages/dialect/src/dialect.test.ts+19 −0
packages/dialect/src/dialect.ts+22 −1
packages/dialect/src/index.ts+2 −1
packages/dialect/src/limits.ts+5 −0
packages/dialect/src/nodes/questionnaire-choices.test.ts+58 −0
packages/dialect/src/nodes/questionnaire-fields.ts+108 −0
packages/dialect/src/nodes/questionnaire-history.test.ts+96 −0
packages/dialect/src/nodes/questionnaire-lifecycle.test.ts+55 −0
packages/dialect/src/nodes/questionnaire-mdx.ts+136 −0
packages/dialect/src/nodes/questionnaire-validation.test.ts+95 −0
packages/dialect/src/nodes/questionnaire.test-fixtures.ts+48 −0
packages/dialect/src/nodes/questionnaire.test.ts+2 −34
packages/dialect/src/nodes/questionnaire.ts+12 −140
packages/dialect/src/validate.ts+112 −7
packages/editor/src/card-meta.test.ts+110 −0
packages/editor/src/card-meta.ts+93 −0
packages/editor/src/comment-geometry.test.ts+26 −1
packages/editor/src/comment-geometry.ts+28 −0
packages/editor/src/decision-pin.test.ts+54 −0
packages/editor/src/decision-pin.ts+37 −0
packages/editor/src/decision-placement.ts+7 −0
packages/editor/src/decision-state.test.ts+158 −2
packages/editor/src/decision-state.ts+32 −3
packages/editor/src/decisions-metadata.test.tsx+73 −0
packages/editor/src/decisions.tsx+40 −10
packages/editor/src/evidence-geometry.test.ts+44 −0
packages/editor/src/evidence-geometry.ts+44 −0
packages/editor/src/index.ts+3 −0
packages/editor/src/marks.test.ts+112 −1
packages/editor/src/marks.ts+80 −25
packages/editor/src/plan-editor.tsx+23 −1
packages/editor/src/presence-faces.tsx+5 −2
packages/editor/src/provider.test.ts+79 −4
packages/editor/src/provider.ts+21 −7
packages/editor/src/questionnaires.test.ts+199 −2
packages/editor/src/questionnaires.ts+95 −9
packages/editor/src/resolved-actions.ts+114 −0
packages/editor/src/resolved-layer.tsx+189 −27
packages/editor/src/resolved-metadata.test.ts+49 −0
packages/editor/src/resolved.ts+29 −0
packages/editor/src/styles.css+80 −1
packages/editor/src/threads.ts+2 −2
packages/editor/src/widget-options.ts+6 −0
packages/editor/src/widgets-plugin.tsx+6 −0
packages/editor/src/widgets/card-gap.test.ts+38 −0
packages/editor/src/widgets/card-gap.tsx+76 −0
packages/editor/src/widgets/decision-deletion.tsx+148 −0
packages/editor/src/widgets/decorator-selection.test.ts+38 −2
packages/editor/src/widgets/decorator-selection.tsx+3 −2
packages/editor/src/widgets/discarded-navigation-boundary.ts+27 −0
packages/editor/src/widgets/discarded-navigation.test.ts+63 −0
packages/editor/src/widgets/discarded-navigation.tsx+157 −0
packages/editor/src/widgets/evidence-hover.tsx+216 −0
packages/editor/src/widgets/index.ts+3 −0
packages/editor/src/widgets/questionnaire-collapse-list.test.tsx+77 −0
packages/editor/src/widgets/questionnaire-collapse-presence.test.tsx+58 −0
packages/editor/src/widgets/questionnaire-collapse-settled.test.tsx+73 −0
packages/editor/src/widgets/questionnaire-lifecycle.test.tsx+86 −0
packages/editor/src/widgets/questionnaire-metadata.test-fixtures.ts+28 −0
packages/editor/src/widgets/questionnaire-metadata.test.tsx+115 −0
packages/editor/src/widgets/questionnaire-people.test.tsx+36 −0
packages/editor/src/widgets/questionnaire-presentation.test.tsx+40 −0
packages/editor/src/widgets/questionnaire-previous.test.tsx+30 −0
packages/editor/src/widgets/questionnaire-source.test.tsx+36 −0
packages/editor/src/widgets/questionnaire-terminal-semantics.test.tsx+54 −0
packages/editor/src/widgets/questionnaire.tsx+288 −16
packages/icons/src/line.tsx+9 −10
packages/protocol/chat.d.ts+26 −1
packages/protocol/conversation-plan.d.ts+440 −0
packages/protocol/index.d.ts+3 −0
packages/protocol/plan.d.ts+11 −0
packages/protocol/question.d.ts+94 −6
packages/question/src/answer.ts+2 −3
packages/question/src/draft.ts+1 −3
packages/question/src/index.ts+12 −1
packages/question/src/limits.ts+2 −0
packages/question/src/options.test.ts+124 −0
packages/question/src/options.ts+60 −0
packages/question/src/question.test.ts+211 −2
packages/question/src/react/add-option.test.ts+63 −0
packages/question/src/react/index.ts+8 −0
packages/question/src/react/open-discard-compatibility.test.ts+29 −0
packages/question/src/react/open-discard.test.ts+25 −0
packages/question/src/react/previous-answer.test.ts+43 −0
packages/question/src/react/project-suggestion.test.ts+128 −0
packages/question/src/react/project-suggestion.ts+93 −0
packages/question/src/react/question-view-projection.test.ts+106 −0
packages/question/src/react/question-view-retained-contracts.test.ts+117 −0
packages/question/src/react/question-view-terminal-origin.test.ts+112 −0
packages/question/src/react/question-view.test-fixtures.ts+14 −0
packages/question/src/react/question-view.tsx+185 −60
packages/question/src/react/questionnaire-controller.ts+600 −0
packages/question/src/react/questionnaire-types.ts+43 −0
packages/question/src/react/refining.test.ts+16 −0
packages/question/src/react/resolved-actions.test.ts+84 −0
packages/question/src/react/resolved-actions.tsx+75 −0
packages/question/src/react/use-questionnaire-cancel.test.ts+68 −0
packages/question/src/react/use-questionnaire-definition.test.ts+103 −0
packages/question/src/react/use-questionnaire-lifecycle.test.ts+83 −0
packages/question/src/react/use-questionnaire-option-growth.test.ts+139 −0
packages/question/src/react/use-questionnaire-refresh-save.test.ts+133 −0
packages/question/src/react/use-questionnaire-save.test.ts+136 −0
packages/question/src/react/use-questionnaire.test-fixtures.ts+116 −0
packages/question/src/react/use-questionnaire.test.ts+12 −14
packages/question/src/react/use-questionnaire.ts+17 −520
packages/question/src/schema.ts+54 −0
scripts/compose.test.ts+3 −0
scripts/conversation-plan-worker.test.ts+331 −0
scripts/conversation-plan-worker.ts+571 −0
scripts/conversation-plan.ts+367 −0
scripts/design-contract/exceptions/dynamic-editor.json+51 −37
scripts/design-contract/exceptions/dynamic-packages.json+24 −10
scripts/design-contract/exceptions/dynamic-web.json+17 −3