Question Management: State of Play¶
Comprehensive analysis of the Question Management feature -- existing work, planned roadmap, open branches, and next steps.
Table of Contents¶
- Executive Summary
- What Exists Today
- What Is Planned
- Branch and PR Inventory
- GitHub Issues Tracker
- Developer Contributions
- Technical Architecture
- Design Resources
- Planning Documentation Index
- Considerations for Reimplementation
Executive Summary¶
Question Management (QM) is the project administrator's tool for defining, organizing, and assigning the questions that annotators answer during systematic reviews. Development has spanned from March 2021 to present, with the bulk of UI implementation work done in 2023-2024 by karmakarmala, followed by architecture/planning work in 2025-2026 by chrissena.
Current State¶
- A functional v2 QM UI exists in main, behind the
newQuestionManagementfeature flag (currentlyfalsein staging/production,truein PR preview environments) - The legacy "Question Design" (v1) is the live interface users interact with today
- The v2 implementation covers three tabs: Design (mostly complete), Assign (complete), Preview (basic)
- No versioning, no question lifecycle management -- the v2 UI is still a "mutable question" editor, not the planned versioned system
- 20 PRs have been created (7 merged, 2 open, 11 closed without merge)
- 27 GitHub issues tracked (5 closed, 22 still open)
- 15 remote branches with unmerged QM work exist
- Comprehensive planning documentation exists in this branch under
docs/features/question-management/, including the current Phase 1-9 implementation, migration, prototype, and UI specs
Key Decision Point¶
The existing v2 implementation was built with older Angular patterns (template-driven forms, ngrx SignalStore). The planned roadmap calls for modern Angular (signal forms, zoneless components, modern template syntax). A decision is needed on whether to extend the existing code or rebuild from scratch using the existing work as reference.
What Exists Today¶
Legacy Question Design (v1) -- In Production¶
- Route:
/project/:id/admin/question-design - Component:
AnnotationQuestionDesignerComponent - Location:
src/services/web/src/app/project/project-admin/annotation-question-designer/ - Status: Active in production, fully functional but clunky UX
- Capabilities: Create/edit annotation questions via dialog-based UI, basic question types, option management
- Limitations: No tree visualization, no drag-and-drop, no inline editing, dialog-heavy workflow
New Question Management (v2) -- Behind Feature Flag¶
- Route:
/project/:id/admin/questions - Feature flag:
newQuestionManagement(env var:SYRF__FeatureFlags__NewQuestionManagement) - Flag status:
falsein staging/production,truein PR previews only - Location:
src/services/web/src/app/project/project-admin/question-management/
Design Tab (Most Complete)¶
| Capability | Status | Notes |
|---|---|---|
| Category tabs (Study, Cohort, DMI, Treatment, OA, Experiment) | Done | MatTabGroup with per-category tree |
| Tree-based question hierarchy | Done | mat-tree with nested nodes |
| Per-question view states (collapsed/expanded/edit/preview) | Done | QuestionNodeComponent manages state |
| Inline editing with validation | Done | Template-driven forms + Vest validation |
| Question CRUD (add, save, copy, delete) | Done | With confirmation dialogs |
| Drag-and-drop reordering | Done | Custom SignalStore feature (23KB) |
| Conditional sub-questions | Done | Boolean or option-based parent conditions |
| Question locking (when annotations exist) | Done | Checks annotation answer tally |
| Revert-to-saved | Done | |
| Child question validation | Partial | Open PR #2387 adds isChildInvalid metadata |
| Save/delete backend linkup | Partial | Some stubs, not all operations wired |
Assign Tab (Complete)¶
| Capability | Status | Notes |
|---|---|---|
| Stage selector | Done | |
| Dual-tree view (all questions / stage questions) | Done | |
| Checkbox selection with ancestor/descendant auto-selection | Done | |
| Category-level select-all/deselect-all | Done | |
| Assign/Unassign workflows | Done | |
| Badge counts per category | Done | |
| Locked question warnings | Done | |
| Dirty check / unsaved changes guard | Open branch | QMAssignDirtyCheck branch, not merged |
Preview Tab (Basic)¶
| Capability | Status | Notes |
|---|---|---|
| Stage selector | Done | |
| Renders AnnotationFormComponent | Done | Shows exactly what annotators see |
| Read-only preview | Done | |
| Preview refinements (styling, IDs, buttons) | Partial | Issues #1531-#1533 partially addressed |
Backend (API + Domain)¶
| Capability | Location | Status |
|---|---|---|
| Upsert question | PUT /project/{id}/annotationQuestion/{qId} |
Done |
| Reposition question | PUT /project/{id}/annotationQuestion/{qId}/{destId} |
Done |
| Copy question | POST /project/{id}/annotationQuestion/{qId}/copy |
Done |
| Delete question | DELETE /project/{id}/annotationQuestion/{qId} |
Done |
| Update stage questions | PUT /project/{id}/stages/{stageId}/questions |
Done |
| Annotation answer tally | PUT /project/{id}/update-annotation-answer-tally |
Done |
| Placement validation rules | AnnotationQuestionPlacementValidator.cs |
Done (PR #2234, merged) |
| Question versioning API | -- | Not started |
| Question set management API | -- | Not started |
Data Model (Current)¶
Questions are embedded subdocuments within the pmProject collection. Each project has an AnnotationQuestions array. There are no separate collections for questions, versions, or question sets.
What Is Planned¶
The PR #2398 worktree contains comprehensive planning documentation defining a multi-phase roadmap.
Core Problem Being Solved¶
Three limitations of the current system:
- Editing locks after first answer -- once any annotator answers a question, it's permanently locked
- No version history -- edits happen in-place with no audit trail
- No stage configuration history -- impossible to know what form an annotator saw at any point
Solution: Two-Phase Question Lifecycle¶
Phase A -- Drafting (before stage activation): - Draft Questions (DQs) are fully mutable design-time objects on the Project aggregate - Admins iterate freely on everything - The existing v2 QM UI becomes the DQ editor
Phase B -- Activated (after stage goes live): - Annotation Questions (AQs) are committed production entities with frozen identity properties - Content changes create new AQVersions (immutable snapshots) - Question Set Versions (QSVs) track which question versions are assigned to a stage
Planned Data Model¶
| Entity | Collection | Purpose |
|---|---|---|
| DraftAQ | Embedded on pmProject | Mutable design-time question |
| AnnotationQuestion (AQ) | pmAnnotationQuestion (new) |
Stable identity + append-only version list |
| AQVersion | Embedded in AQ | Immutable content snapshot |
| QuestionSet (QS) | pmQuestionSet (new) |
Named versioned collection of question versions |
| QuestionSetVersion (QSV) | Embedded in QS | Immutable ordered list of AQVersionId refs |
Release 1 Delivery Phases¶
| Phase | Name | Depends On | Status |
|---|---|---|---|
| 2 | PRISMA Specification | -- | Approved |
| 3 | Collection Infrastructure | 2 | Planned -- new MongoDB collections |
| 4 | Question Lifecycle | 3 | Planned -- DQ-to-AQ activation, versioning |
| 5 | Annotation Form v2 | 4 | Planned -- virtual scroll, per-question auto-save |
| 6 | Question Management UI | 4 | Planned -- version history, diff viewer, admin decision framework |
| 6.1 | Annotation Import | 5, 6 | Planned |
| 7 | Migration | 4-6 | Planned -- backfill existing questions as v1 |
Phases 5 and 6 can run in parallel (both depend on Phase 4 only).
Branch and PR Inventory¶
Open PRs (Active Work)¶
| PR | Title | Branch | Author | Scope |
|---|---|---|---|---|
| #2398 | docs: product roadmap, feature specs, and planning | claude/describe-branch-work-TG5qs |
chrissena | 284 files, planning docs including QM roadmap |
| #2387 | feat: QM child question visualization and assign tree | QMChildQuestionVisualize |
chrissena | 46 files, child validation, flat assign tree, sticky headers |
Merged PRs (Code in Main)¶
| PR | Title | Branch | Author | Merged | Aspect |
|---|---|---|---|---|---|
| #2234 | MongoDB testing + annotation question validation | -- | chrissena | 2025-12-27 | Backend placement rules |
| #1633 | Preview all question types in design component | QMDesignPreview |
karmakarmala | 2024-07-29 | Design preview |
| #1627 | QM Design Page - Copy, Delete Functionality | -- | karmakarmala | 2024-07 | Design CRUD |
| #1611 | QM Assign Page changes as per MVP | -- | karmakarmala | 2024-07 | Assign MVP |
| #1585 | QM Design Page Changes | -- | karmakarmala | 2024-07 | Design (closed 8 issues) |
| #1560 | Question Management Preview component | QDPreviewPage |
karmakarmala | 2024-05-09 | Preview tab |
| #1495 | Question management assign page | QuestionManagementAssignPage |
karmakarmala | 2024-05-08 | Assign tab |
| #1544 | QM Layout changes | -- | karmakarmala | 2024-05 | Layout polish |
| #1344 | Question management edit | QuestionManagementEdit |
karmakarmala | 2023-12-05 | Edit mode |
| #1195 | Question design hybrid mode | QuestionDesignHybrid |
karmakarmala | 2023-02-13 | Hybrid view |
| #240 | Add missing question-design component | fix/addQuestionDesignComponent |
canayder | 2021-03-23 | Initial scaffolding |
Closed PRs (Unmerged -- Work on Branches)¶
These contain code that was never merged into main. Some was superseded by later PRs, some represents abandoned work.
| PR | Title | Branch | Author | Closed | Notes |
|---|---|---|---|---|---|
| #2325 | Annotation question mgmt & reconciliation specs | feat/annotation-question-mgmt-reconciliation |
chrissena | 2026-02-11 | Docs only; superseded by #2398 |
| #1676 | QM Design preview changes | QMPDesignPreviewChanges |
karmakarmala | 2025-12 | 50 files, 1273+ lines -- major node visualization, system questions, tree collapse. Closed 6 issues. Not merged. |
| #1662 | Assign Page dirty check & Project Redirection | QMAssignDirtyCheck |
karmakarmala | -- | Dirty check guard, 5 files |
| #1649 | Parent/child question validation | QMChildQuestionVisualize |
karmakarmala | 2025-12 | 46 files; branch reused by #2387 |
| #1631 | QM MVP Design page - preview question view | QMDesignPreviewQuestion |
karmakarmala | 2024-07 | Superseded by #1633 |
| #1586 | QM Assign Page - system question lock icon | QMAssignPageFix |
karmakarmala | 2025-12 | 5 files, small fix |
| #1564 | QM Wizards - Edit text & Edit Options | QDWizards |
karmakarmala | 2025-12 | Dialog-based edit wizards, 10 files |
| #1494 | Question management preview page | QuestionManagementPreviewPage |
karmakarmala | 2024-05 | Superseded by #1560 |
| #1430 | QM Assign Component | QuestionManagementAssignPage |
chrissena | 2024-03 | Superseded by #1495 |
| #1227 | Question design edit form | QuestionDesignEditForm |
karmakarmala | 2023-10 | Superseded by #1344 |
| #1217 | Question design edit layout | QuestionDesignEdit |
karmakarmala | 2023-10 | Superseded by #1344 |
| #1194 | Question rearrange mode preview | EditQuestionRearrange |
Asit-GIT199 | 2023-09 | Rearrange mode |
| #1181 | Question design expand hybrid mode | QuestionEditingHybridMode |
karmakarmala | 2025-12 | Superseded by #1195 |
| #870 | Create hybrid question viewing component | feature/hybridQuestionViewing |
canayder | 2025-12 | WIP draft, never merged |
Unmerged Branches with Significant Work¶
These branches contain code that is NOT in main and may need to be evaluated for salvage:
| Branch | Commits Ahead | Files | Key Work |
|---|---|---|---|
QMPDesignPreviewChanges |
22 | 50 | System question visualization, tree node icons, collapse/expand, tooltips |
QMChildQuestionVisualize |
12 | 46 | Child validation, flat assign tree (active PR #2387) |
QuestionDesignEditForm |
36 | 25 | Edit form with validation (superseded but has logic) |
QuestionManagementPreviewPage |
18 | 28 | Full preview page (superseded by #1560) |
feature/hybridQuestionViewing |
12 | 23 | Hybrid view with category tabs |
QDWizards |
6 | 10 | Dialog-based edit wizards |
QMAssignDirtyCheck |
4 | 5 | Unsaved changes guard |
QMAssignPageFix |
3 | 5 | Lock icon for system questions |
GitHub Issues Tracker¶
Open Issues by Area (22 total)¶
Design Tab (16 open issues)¶
| Issue | Title | Labels | Linked PR |
|---|---|---|---|
| #1172 | Edit Question Text & Description Wizard | ui template | #1564 |
| #1197 | Edit Mode Layout | MVP, ui template | #1344 |
| #1519 | "Add question" button functionality | ui template | #1585 |
| #1520 | Undo/save/duplicate backend functionality | domain logic | #1585 |
| #1523 | Change icon/button colours | ui template | #1585 |
| #1524 | "Revert changes" button functionality | ui template | #1585 |
| #1561 | Options Wizard (add/delete/change options) | MVP, ui template | #1564 |
| #1568 | Design page layout consistency | ui template | #1585 |
| #1572 | Save & Delete backend linkup | back-end services link-up | #1585 |
| #1579 | Bug fixes (split answers, checklist, checkbox) | fix, ui template | #1585 |
| #1580 | Hybrid view copy/delete + formatting | ui template, domain logic | #1585 |
| #1593 | Visualising edited children | MVP, ui template | #1649 |
| #1607 | Copy/Delete annotation question logic | data logic | #1627 |
| #1624 | Preview question view in Design | ui template | #1633 |
| #1657 | Switch preview to below question creation | MVP, ui template | #1676 |
| #1660 | Question preview / collapse mode | MVP, ui template | #1676 |
| #1661 | Child question validation errors | MVP, ui template | #1649 |
| #1682 | Replace "Add Question" with Disease Model/Treatment menu | MVP, ui template, domain logic | #1676 |
| #1687 | Question node visualization (expand/collapse, icons) | MVP, ui template | #1676 |
| #1691 | Root system question visual representation | MVP, ui template | #1676 |
| #1694 | Question node polish (lock icon, mat hint) | MVP, ui template | #1676 |
Assign Tab (3 open issues)¶
| Issue | Title | Labels | Linked PR |
|---|---|---|---|
| #1547 | Placeholder text (no questions / no stage) | ui template | #1611 |
| #1599 | Assign MVP tasks | ui template | #1611 |
| #1648 | Intuitivity of assigning questions | MVP, ui template | #1649 |
Preview Tab (3 open issues)¶
| Issue | Title | Labels | Linked PR |
|---|---|---|---|
| #1531 | Grey info boxes | ui template | #1560 |
| #1532 | Add IDs for URL navigation | ui template | #1560 |
| #1533 | Add save/revert/delete buttons | ui template | #1560 |
General / Performance (1 open issue)¶
| Issue | Title | Labels |
|---|---|---|
| #1125 | Annotation form slow/unresponsive with many units | bug |
Note on Issue Status¶
Many of these issues reference PRs that were merged, but the issues themselves remain open. Some may already be resolved in main. Others reference unmerged branches with the actual fixes. A triage pass is recommended before beginning new work.
Developer Contributions¶
| Developer | GitHub Handle | Role | PRs | Contribution Areas |
|---|---|---|---|---|
| Mala Karmakar | karmakarmala / Mala K | Primary implementer | 12 PRs (2023-2024) | All three tabs (Design, Assign, Preview), edit forms, wizards, preview components, layout, MVP features |
| Chris Sena | chrissena / Chris | Architect, reviewer, implementer | 5 PRs (2024-2026) | Backend validation rules, child question visualization, assign tree improvements, all planning/spec docs, PR reviews |
| Can Ayder | canayder | Early contributor | 2 PRs (2021) | Initial component scaffolding, hybrid viewing prototype |
| Asit | Asit-GIT199 | Contributor | 1 PR (2023) | Question rearrange mode |
| Nuri Karakaya | nurikarakaya | Tangential | 1 PR (draft) | Responsiveness fixes mentioning QM |
| Alexandra Bannach-Brown | abannachbrown | Product owner | 0 PRs | Created majority of QM issues, defined MVP requirements, usability feedback |
| Grace Currie | gcurrie768 | Product contributor | 0 PRs | Created issues for wizards, layout, assign UX |
Technical Architecture¶
Component Structure (Current v2)¶
QuestionManagementComponent (tab container: Design | Assign | Preview)
|
+-- DesignComponent (provides: DesignStore)
| +-- mat-tab-group (one tab per category)
| +-- mat-tree (nested question hierarchy)
| +-- QuestionNodeComponent (per question)
| +-- HybridComponent (collapsed/expanded summary)
| | +-- OptionsComponent (option chips)
| +-- EditComponent (template-driven form + Vest validation)
| +-- PreviewQuestionComponent (type-specific preview)
| +-- PreviewTextboxQuestionComponent
| +-- PreviewSelectQuestionComponent
| +-- PreviewCheckboxQuestionComponent
| +-- PreviewRadioQuestionComponent
| +-- PreviewAutocompleteQuestionComponent
| +-- PreviewChecklistQuestionComponent
|
+-- AssignComponent (stage selector + router-outlet)
| +-- StageAssignComponent (dual-tree with checkboxes)
| +-- NoStageComponent (empty state)
|
+-- PreviewComponent (stage selector + router-outlet)
+-- StagePreviewComponent (renders AnnotationFormComponent)
+-- NoPreviewComponent (empty state)
State Management¶
- Design: ngrx
signalStore()-- component-scoped, 817 lines, composeswithAnnotationQuestionsFeature+withAnnotationQuestionTreeDragAndDropFeature+withRequestStateFeature - Assign: ngrx
signalStore()-- root-scoped singleton, 836 lines, composes twowithAnnotationQuestionTreeFeatureinstances - Global reads: Pulls from ngrx Store for annotation questions, stages, project context, feature flags
- Forms: Template-driven with
ngModel+ Vest validation suite
Backend¶
- Questions are embedded subdocuments in
pmProject.AnnotationQuestions[] - Domain methods on
Projectaggregate:UpsertCustomAnnotationQuestion,CopyAnnotationQuestion,RepositionQuestion,DeleteAnnotationQuestion - Placement validation:
AnnotationQuestionPlacementValidator.cswith 81 unit + integration tests - API controller:
ProjectController.cs - DTOs auto-generated to
api-client.generated.ts
Tests¶
QM tests are currently excluded from both vitest.config.ts and angular.json test configurations. No QM tests run in CI.
Design Resources¶
Figma Designs¶
- Project: "SyRF Design v2" (file key:
CVHEW6l1oCEehOkhl6SLGa) - Team: SyRF (Starter plan, Chris Sena's account)
"Question Editing" Page (Older Designs)¶
- URL:
https://www.figma.com/design/CVHEW6l1oCEehOkhl6SLGa/SyRF-Design-v2?node-id=4336-10929 - Key frames:
Settings - Question Design (Collapsed Hybrid Mode)(4336:10930) -- Main design page with hybrid collapsed view for all question types (input, checkbox, checklist, autocomplete, radio, dropdown)Settings - Question Design (rearrange mode)(4336:11186) -- Rearrange mode for reordering questions- Question type hybrid collapsed views: input box, checkbox, checklist, autocomplete, radio buttons, drop down list
- Parent-child connector visualization
"Question Editing MVP" Page (Most Recent Designs)¶
- URL:
https://www.figma.com/design/CVHEW6l1oCEehOkhl6SLGa/SyRF-Design-v2?node-id=5841-17420 - Key frames:
Settings - Question Management (Edit Mode)(5841:17511) -- Edit mode with inline form, question settings checkboxes, activation stateSettings - Question Design (Assign Stage) - Annotation Not Enabled(5841:19577) -- Assign tab showing stage assignment when annotation is not yet enabledCSI Task 3 - Settings - Question Design (Assign Stage) - Annotation Not Enabled(12247:21245) -- Revised assign stage design iteration-
Multiple additional frames covering assign page states, preview modes, and validation states
-
Note: The Figma designs predate the planned versioning workflow (AQVersions, Question Sets). They represent the "mutable question editor" that maps to the Draft Question phase. The versioning UI (version history, diff viewer, admin decision framework) has no Figma designs yet.
Legacy Question Design (v1)¶
The existing v1 "Question Design" dialog-based interface is the baseline that all users are currently familiar with. Located at src/services/web/src/app/project/project-admin/annotation-question-designer/.
Planning Documentation Index¶
The current planning set for this branch lives directly in docs/features/question-management/.
Core Planning Docs¶
| Document | Path | Content |
|---|---|---|
| State of Play | docs/features/question-management/state-of-play.md |
Current implementation status, branch inventory, and reimplementation guidance |
| Implementation Plan | docs/features/question-management/implementation-plan.md |
Canonical Phase 1-9 delivery plan |
| Migration Strategy | docs/features/question-management/migration-strategy.md |
Per-project migration, rollout, rollback, and production integrity checks |
| UI Specification | docs/features/question-management/ui-specification.md |
Authoritative UI behaviour, layout, and terminology decisions |
| Publishing & Versioning UX | docs/features/question-management/publishing-versioning-ux.md |
Publish mental model, entry points, and workflow details |
| Mental Model Review Decisions | docs/features/question-management/mental-model-review-decisions.md |
Naming, lifecycle, and interaction-model decisions |
| Annotation Versioning Integration | docs/features/question-management/annotation-versioning-integration.md |
How QM v2 aligns with later annotation/session versioning work |
Design References & Validation Artifacts¶
| Document | Path | Content |
|---|---|---|
| Prototype | docs/features/question-management/prototype.html |
Interactive HTML prototype for Design / Assign / Preview flows |
| Figma Design Reference | docs/features/question-management/figma-design-reference.md |
Links to source Figma frames and design context |
| Training Rounds | docs/features/question-management/training-rounds.md |
Adoption / usability notes for validation and rollout planning |
Key Design Decisions (from specs)¶
- Identity + Immutable Versions -- uniform pattern across AQ, QS, Annotation, Session
- Two-phase lifecycle -- free-form drafting, then controlled versioning after activation
- Structural properties frozen after activation -- dataType, parentQuestionId, groupAsSingle immutable
- Content versionable -- text, options, helpText, answerFilters evolve via new AQVersions
- Composite identity -- (rootId, versionNumber) for version entities
- Admin Decision Framework -- when QSV changes mid-session, admin decides per-session handling
- BreakingChange flag -- advisory from admin, system auto-detects actual breaks
- Layered validation -- Frontend (UX), API (FluentValidation), Domain (authoritative)
Considerations for Reimplementation¶
What to Keep¶
- Backend API surface -- the 6 endpoints for CRUD, copy, reposition, and stage assignment are solid and well-tested
- Backend placement validation --
AnnotationQuestionPlacementValidator.cswith 81 tests (PR #2234) - Domain model --
Projectaggregate methods are functional - Planning documentation -- the feature specs and roadmap are comprehensive and should guide implementation
- Component hierarchy concept -- the Design/Assign/Preview tab structure is sound
- Business rules YAML --
annotation-question-rules.yamlas single source of truth
What Needs Modernization¶
| Area | Current | Target |
|---|---|---|
| Forms | Template-driven + ngModel + Vest | Angular Signal Forms (@angular/forms/signals) |
| State management | ngrx SignalStore (component features) | ngrx Signal Store with modern patterns |
| Template syntax | Legacy Angular templates | Modern control flow (@if, @for, @switch) |
| Change detection | Zone-based | Zoneless (ChangeDetectionStrategy.OnPush minimum) |
| Testing | Excluded from CI | Full coverage with vitest |
What Is Missing (Not Yet Built)¶
- Question versioning (AQVersion lifecycle)
- Question Set management (QS/QSV composition)
- Version history viewer and diff display
- Admin Decision Framework (handling in-progress sessions when questions change)
- Stage activation workflow (DraftAQ -> AQ conversion)
pendingChangesbuffer for auto-save- New MongoDB collections (
pmAnnotationQuestion,pmQuestionSet) - Migration tooling (backfill existing questions as v1 AQVersions)
- Annotation Form v2 (virtual scroll, per-question auto-save)
Unmerged Branch Work to Evaluate¶
The following branches contain work that was never merged but may inform the reimplementation:
| Branch | Value | Risk |
|---|---|---|
QMPDesignPreviewChanges (22 commits) |
System question visualization, tree node polish, collapse/expand | Built on older patterns; UX concepts valuable, code likely needs rewrite |
QMChildQuestionVisualize (12 commits, PR #2387 open) |
Child validation, flat assign tree | Most recent work; closest to current patterns |
QDWizards (6 commits) |
Dialog-based edit workflows | Concept may not align with inline editing direction |
QMAssignDirtyCheck (4 commits) |
Unsaved changes guard | Small, useful pattern to incorporate |
QMAssignPageFix (3 commits) |
System question lock icon | Tiny fix, easy to incorporate |
UX/UI Considerations¶
- The existing v2 Design tab is tree-based with per-node view states -- this concept works well
- The Assign tab's dual-tree with checkbox selection is functional but the UX for "intuitivity of assigning" (issue #1648) was never resolved
- The Preview tab simply renders the existing AnnotationFormComponent -- when Annotation Form v2 is built, this will need to use the new component
- The Figma designs in "SyRF Design v2" should be consulted but may need updating for the versioning workflow
- Performance with many questions (issue #1125) is a known concern that the new implementation should address
Recommended Approach¶
Based on the analysis:
- Triage the 22 open issues -- close what's been resolved, update what's still relevant
- Evaluate PR #2387 -- decide whether to merge the child question work or incorporate it into the new implementation
- Implement against the current Phase 1-9 plan in
implementation-plan.md, not the older PR2398 phase labels - Start with Phases 1-3 (data model, migration infrastructure, backend API) because the new collections and publish semantics are prerequisites for the UI
- Build Phases 4-6 (Design, Assign, Preview) against the updated UX specs and prototype in this branch
- Treat Phase 7 (Annotation Form v2) and Phase 8 (Admin Decision Framework) as distinct investments with their own validation and rollout gates
- Use
migration-strategy.mdas the operational source of truth for rollout, system-question upgrades, and rollback planning
This document was compiled on 2026-03-30 from analysis of 20 PRs, 27 issues, 15 branches, and the current question-management planning docs in this branch.