{ "version": 1, "generatedBy": "scripts/generate-requirements.mjs", "sources": [ { "path": "docs/JPW7在线简谱编辑器-产品需求文档.md", "version": "current project baseline" }, { "path": "docs/JPW7在线简谱编辑器-功能规格与技术方案.md", "version": "current project baseline" }, { "path": "docs/JPW7在线简谱编辑器-开发步骤计划.md", "version": "v1.1" }, { "path": "docs/JPW7在线简谱编辑器-验收标准.md", "version": "v1.2" }, { "path": "docs/JPW7在线简谱编辑器-兼容性矩阵.md", "version": "current project baseline" } ], "capabilityDimensions": [ "file-codec", "parser", "lossless-retention", "semantic-model", "stable-anchor", "commands", "project-save", "layout", "svg", "playback", "compatibility-export", "e2e", "performance", "security", "accessibility", "licensing", "evidence" ], "entryCount": 61, "entries": [ { "id": "F-001", "source": "PRD-F-001..007", "priority": "P0", "scope": "R1", "stages": [ "M1", "M2", "M4", "M5" ], "accRefs": [ "ACC-F-001..020", "ACC-X-001..012" ], "status": "baseline-not-started", "notes": "核心文件、导入、编辑、工程和导出闭环;在实现阶段拆解为逐条断言。" }, { "id": "F-002", "source": "PRD-F-001..007", "priority": "P0", "scope": "R1", "stages": [ "M1", "M2", "M4", "M5" ], "accRefs": [ "ACC-F-001..020", "ACC-X-001..012" ], "status": "baseline-not-started", "notes": "核心文件、导入、编辑、工程和导出闭环;在实现阶段拆解为逐条断言。" }, { "id": "F-003", "source": "PRD-F-001..007", "priority": "P0", "scope": "R1", "stages": [ "M1", "M2", "M4", "M5" ], "accRefs": [ "ACC-F-001..020", "ACC-X-001..012" ], "status": "baseline-not-started", "notes": "核心文件、导入、编辑、工程和导出闭环;在实现阶段拆解为逐条断言。" }, { "id": "F-004", "source": "PRD-F-001..007", "priority": "P0", "scope": "R1", "stages": [ "M1", "M2", "M4", "M5" ], "accRefs": [ "ACC-F-001..020", "ACC-X-001..012" ], "status": "baseline-not-started", "notes": "核心文件、导入、编辑、工程和导出闭环;在实现阶段拆解为逐条断言。" }, { "id": "F-005", "source": "PRD-F-001..007", "priority": "P0", "scope": "R1", "stages": [ "M1", "M2", "M4", "M5" ], "accRefs": [ "ACC-F-001..020", "ACC-X-001..012" ], "status": "baseline-not-started", "notes": "核心文件、导入、编辑、工程和导出闭环;在实现阶段拆解为逐条断言。" }, { "id": "F-006", "source": "PRD-F-001..007", "priority": "P0", "scope": "R1", "stages": [ "M1", "M2", "M4", "M5" ], "accRefs": [ "ACC-F-001..020", "ACC-X-001..012" ], "status": "baseline-not-started", "notes": "核心文件、导入、编辑、工程和导出闭环;在实现阶段拆解为逐条断言。" }, { "id": "F-007", "source": "PRD-F-001..007", "priority": "P0", "scope": "R1", "stages": [ "M1", "M2", "M4", "M5" ], "accRefs": [ "ACC-F-001..020", "ACC-X-001..012" ], "status": "baseline-not-started", "notes": "核心文件、导入、编辑、工程和导出闭环;在实现阶段拆解为逐条断言。" }, { "id": "F-008", "source": "PRD-F-008", "priority": "P1", "scope": "R1", "stages": [ "M2", "M4", "M6", "M7" ], "accRefs": [ "ACC-F-021..022", "ACC-L-009..011", "ACC-L-019", "ACC-X-013" ], "status": "baseline-not-started", "notes": "扩展编辑能力,未知内容必须保留并诊断。" }, { "id": "E-001", "source": "PRD-E-001..004", "priority": "P0", "scope": "R1", "stages": [ "M2", "M4", "M6" ], "accRefs": [ "ACC-E-001..004", "ACC-E-007", "ACC-F-009" ], "status": "baseline-not-started", "notes": "核心节拍、音符、休止和时值语义。" }, { "id": "E-002", "source": "PRD-E-001..004", "priority": "P0", "scope": "R1", "stages": [ "M2", "M4", "M6" ], "accRefs": [ "ACC-E-001..004", "ACC-E-007", "ACC-F-009" ], "status": "baseline-not-started", "notes": "核心节拍、音符、休止和时值语义。" }, { "id": "E-003", "source": "PRD-E-001..004", "priority": "P0", "scope": "R1", "stages": [ "M2", "M4", "M6" ], "accRefs": [ "ACC-E-001..004", "ACC-E-007", "ACC-F-009" ], "status": "baseline-not-started", "notes": "核心节拍、音符、休止和时值语义。" }, { "id": "E-004", "source": "PRD-E-001..004", "priority": "P0", "scope": "R1", "stages": [ "M2", "M4", "M6" ], "accRefs": [ "ACC-E-001..004", "ACC-E-007", "ACC-F-009" ], "status": "baseline-not-started", "notes": "核心节拍、音符、休止和时值语义。" }, { "id": "E-005", "source": "PRD-E-005..008", "priority": "P1", "scope": "R1", "stages": [ "M6", "M8" ], "accRefs": [ "ACC-E-005..012", "ACC-O-001..006", "ACC-A-009", "ACC-A-017", "ACC-A-021..023" ], "status": "baseline-not-started", "notes": "复杂装饰、和弦/伴奏及扩展语义。" }, { "id": "E-006", "source": "PRD-E-005..008", "priority": "P1", "scope": "R1", "stages": [ "M6", "M8" ], "accRefs": [ "ACC-E-005..012", "ACC-O-001..006", "ACC-A-009", "ACC-A-017", "ACC-A-021..023" ], "status": "baseline-not-started", "notes": "复杂装饰、和弦/伴奏及扩展语义。" }, { "id": "E-007", "source": "PRD-E-005..008", "priority": "P1", "scope": "R1", "stages": [ "M6", "M8" ], "accRefs": [ "ACC-E-005..012", "ACC-O-001..006", "ACC-A-009", "ACC-A-017", "ACC-A-021..023" ], "status": "baseline-not-started", "notes": "复杂装饰、和弦/伴奏及扩展语义。" }, { "id": "E-008", "source": "PRD-E-005..008", "priority": "P1", "scope": "R1", "stages": [ "M6", "M8" ], "accRefs": [ "ACC-E-005..012", "ACC-O-001..006", "ACC-A-009", "ACC-A-017", "ACC-A-021..023" ], "status": "baseline-not-started", "notes": "复杂装饰、和弦/伴奏及扩展语义。" }, { "id": "T-001", "source": "PRD-T-001..006", "priority": "P0/P1", "scope": "R1", "stages": [ "M4", "M6" ], "accRefs": [ "ACC-T-001..007", "ACC-L-006", "ACC-L-012" ], "status": "baseline-not-started", "notes": "歌词、分词、对齐和未知歌词内容保留。" }, { "id": "T-002", "source": "PRD-T-001..006", "priority": "P0/P1", "scope": "R1", "stages": [ "M4", "M6" ], "accRefs": [ "ACC-T-001..007", "ACC-L-006", "ACC-L-012" ], "status": "baseline-not-started", "notes": "歌词、分词、对齐和未知歌词内容保留。" }, { "id": "T-003", "source": "PRD-T-001..006", "priority": "P0/P1", "scope": "R1", "stages": [ "M4", "M6" ], "accRefs": [ "ACC-T-001..007", "ACC-L-006", "ACC-L-012" ], "status": "baseline-not-started", "notes": "歌词、分词、对齐和未知歌词内容保留。" }, { "id": "T-004", "source": "PRD-T-001..006", "priority": "P0/P1", "scope": "R1", "stages": [ "M4", "M6" ], "accRefs": [ "ACC-T-001..007", "ACC-L-006", "ACC-L-012" ], "status": "baseline-not-started", "notes": "歌词、分词、对齐和未知歌词内容保留。" }, { "id": "T-005", "source": "PRD-T-001..006", "priority": "P0/P1", "scope": "R1", "stages": [ "M4", "M6" ], "accRefs": [ "ACC-T-001..007", "ACC-L-006", "ACC-L-012" ], "status": "baseline-not-started", "notes": "歌词、分词、对齐和未知歌词内容保留。" }, { "id": "T-006", "source": "PRD-T-001..006", "priority": "P0/P1", "scope": "R1", "stages": [ "M4", "M6" ], "accRefs": [ "ACC-T-001..007", "ACC-L-006", "ACC-L-012" ], "status": "baseline-not-started", "notes": "歌词、分词、对齐和未知歌词内容保留。" }, { "id": "V-001", "source": "PRD-V-001..006", "priority": "P1", "scope": "R1", "stages": [ "M7" ], "accRefs": [ "ACC-V-001..006", "ACC-O-003..006", "ACC-L-020" ], "status": "baseline-not-started", "notes": "多声部、声部组和临时声部。" }, { "id": "V-002", "source": "PRD-V-001..006", "priority": "P1", "scope": "R1", "stages": [ "M7" ], "accRefs": [ "ACC-V-001..006", "ACC-O-003..006", "ACC-L-020" ], "status": "baseline-not-started", "notes": "多声部、声部组和临时声部。" }, { "id": "V-003", "source": "PRD-V-001..006", "priority": "P1", "scope": "R1", "stages": [ "M7" ], "accRefs": [ "ACC-V-001..006", "ACC-O-003..006", "ACC-L-020" ], "status": "baseline-not-started", "notes": "多声部、声部组和临时声部。" }, { "id": "V-004", "source": "PRD-V-001..006", "priority": "P1", "scope": "R1", "stages": [ "M7" ], "accRefs": [ "ACC-V-001..006", "ACC-O-003..006", "ACC-L-020" ], "status": "baseline-not-started", "notes": "多声部、声部组和临时声部。" }, { "id": "V-005", "source": "PRD-V-001..006", "priority": "P1", "scope": "R1", "stages": [ "M7" ], "accRefs": [ "ACC-V-001..006", "ACC-O-003..006", "ACC-L-020" ], "status": "baseline-not-started", "notes": "多声部、声部组和临时声部。" }, { "id": "V-006", "source": "PRD-V-001..006", "priority": "P1", "scope": "R1", "stages": [ "M7" ], "accRefs": [ "ACC-V-001..006", "ACC-O-003..006", "ACC-L-020" ], "status": "baseline-not-started", "notes": "多声部、声部组和临时声部。" }, { "id": "V-007", "source": "PRD-V-007", "priority": "P1", "scope": "R1", "stages": [ "M5", "M7" ], "accRefs": [ "ACC-V-007", "ACC-A-015" ], "status": "baseline-not-started", "notes": "声部级播放/静音与导出边界。" }, { "id": "L-001", "source": "PRD-L-001..006", "priority": "P0/P1", "scope": "R1", "stages": [ "M3", "M6" ], "accRefs": [ "ACC-L-001..008", "ACC-L-013..018", "ACC-L-020", "ACC-G-001..004", "ACC-X-009" ], "status": "baseline-not-started", "notes": "A4 固定布局、分页、字体测量和 SVG 正式谱面。" }, { "id": "L-002", "source": "PRD-L-001..006", "priority": "P0/P1", "scope": "R1", "stages": [ "M3", "M6" ], "accRefs": [ "ACC-L-001..008", "ACC-L-013..018", "ACC-L-020", "ACC-G-001..004", "ACC-X-009" ], "status": "baseline-not-started", "notes": "A4 固定布局、分页、字体测量和 SVG 正式谱面。" }, { "id": "L-003", "source": "PRD-L-001..006", "priority": "P0/P1", "scope": "R1", "stages": [ "M3", "M6" ], "accRefs": [ "ACC-L-001..008", "ACC-L-013..018", "ACC-L-020", "ACC-G-001..004", "ACC-X-009" ], "status": "baseline-not-started", "notes": "A4 固定布局、分页、字体测量和 SVG 正式谱面。" }, { "id": "L-004", "source": "PRD-L-001..006", "priority": "P0/P1", "scope": "R1", "stages": [ "M3", "M6" ], "accRefs": [ "ACC-L-001..008", "ACC-L-013..018", "ACC-L-020", "ACC-G-001..004", "ACC-X-009" ], "status": "baseline-not-started", "notes": "A4 固定布局、分页、字体测量和 SVG 正式谱面。" }, { "id": "L-005", "source": "PRD-L-001..006", "priority": "P0/P1", "scope": "R1", "stages": [ "M3", "M6" ], "accRefs": [ "ACC-L-001..008", "ACC-L-013..018", "ACC-L-020", "ACC-G-001..004", "ACC-X-009" ], "status": "baseline-not-started", "notes": "A4 固定布局、分页、字体测量和 SVG 正式谱面。" }, { "id": "L-006", "source": "PRD-L-001..006", "priority": "P0/P1", "scope": "R1", "stages": [ "M3", "M6" ], "accRefs": [ "ACC-L-001..008", "ACC-L-013..018", "ACC-L-020", "ACC-G-001..004", "ACC-X-009" ], "status": "baseline-not-started", "notes": "A4 固定布局、分页、字体测量和 SVG 正式谱面。" }, { "id": "L-007", "source": "PRD-L-007..008", "priority": "P1", "scope": "R1", "stages": [ "M7" ], "accRefs": [ "ACC-L-009..011", "ACC-L-019" ], "status": "baseline-not-started", "notes": "手动布局状态必须进入工程保存。" }, { "id": "L-008", "source": "PRD-L-007..008", "priority": "P1", "scope": "R1", "stages": [ "M7" ], "accRefs": [ "ACC-L-009..011", "ACC-L-019" ], "status": "baseline-not-started", "notes": "手动布局状态必须进入工程保存。" }, { "id": "L-009", "source": "PRD-L-009", "priority": "P1", "scope": "R1", "stages": [ "M3", "M6" ], "accRefs": [ "ACC-L-005", "ACC-L-015", "ACC-G-001..004" ], "status": "baseline-not-started", "notes": "复杂布局附件和占位行为。" }, { "id": "L-010", "source": "PRD-L-010", "priority": "P1", "scope": "R1", "stages": [ "M3" ], "accRefs": [ "ACC-L-018", "ACC-Q-002" ], "status": "baseline-not-started", "notes": "输出确定性和溢出诊断。" }, { "id": "A-001", "source": "PRD-A-001..003,006..007", "priority": "P0", "scope": "R1", "stages": [ "M5" ], "accRefs": [ "ACC-A-001..008", "ACC-A-012..016" ], "status": "baseline-not-started", "notes": "基础播放、控制、时间线和声部控制。" }, { "id": "A-002", "source": "PRD-A-001..003,006..007", "priority": "P0", "scope": "R1", "stages": [ "M5" ], "accRefs": [ "ACC-A-001..008", "ACC-A-012..016" ], "status": "baseline-not-started", "notes": "基础播放、控制、时间线和声部控制。" }, { "id": "A-003", "source": "PRD-A-001..003,006..007", "priority": "P0", "scope": "R1", "stages": [ "M5" ], "accRefs": [ "ACC-A-001..008", "ACC-A-012..016" ], "status": "baseline-not-started", "notes": "基础播放、控制、时间线和声部控制。" }, { "id": "A-006", "source": "PRD-A-001..003,006..007", "priority": "P0", "scope": "R1", "stages": [ "M5" ], "accRefs": [ "ACC-A-001..008", "ACC-A-012..016" ], "status": "baseline-not-started", "notes": "基础播放、控制、时间线和声部控制。" }, { "id": "A-007", "source": "PRD-A-001..003,006..007", "priority": "P0", "scope": "R1", "stages": [ "M5" ], "accRefs": [ "ACC-A-001..008", "ACC-A-012..016" ], "status": "baseline-not-started", "notes": "基础播放、控制、时间线和声部控制。" }, { "id": "A-004", "source": "PRD-A-004..005", "priority": "P1", "scope": "R1", "stages": [ "M8" ], "accRefs": [ "ACC-A-009..011", "ACC-A-017..023" ], "status": "baseline-not-started", "notes": "反复、谱内控制状态和扩展播放降级。" }, { "id": "A-005", "source": "PRD-A-004..005", "priority": "P1", "scope": "R1", "stages": [ "M8" ], "accRefs": [ "ACC-A-009..011", "ACC-A-017..023" ], "status": "baseline-not-started", "notes": "反复、谱内控制状态和扩展播放降级。" }, { "id": "A-008", "source": "PRD-A-008", "priority": "P2", "scope": "out-of-scope", "stages": [], "accRefs": [ "ACC-A-023" ], "status": "baseline-not-started", "notes": "外部音色/扩展音频能力明确不纳入本目标。" }, { "id": "A-009", "source": "PRD-A-009", "priority": "P1", "scope": "R1", "stages": [ "M8" ], "accRefs": [ "ACC-A-006", "ACC-A-018", "ACC-A-022", "ACC-E-007", "ACC-T-007" ], "status": "baseline-not-started", "notes": "W1 播放金样和控制语义。" }, { "id": "U-001", "source": "PRD-U-001..004", "priority": "P0", "scope": "R1", "stages": [ "M4", "M5", "M9" ], "accRefs": [ "ACC-Q-004..006", "ACC-L-013", "ACC-X-003", "ACC-X-006" ], "status": "baseline-not-started", "notes": "可用性、键盘、无障碍和错误提示。" }, { "id": "U-002", "source": "PRD-U-001..004", "priority": "P0", "scope": "R1", "stages": [ "M4", "M5", "M9" ], "accRefs": [ "ACC-Q-004..006", "ACC-L-013", "ACC-X-003", "ACC-X-006" ], "status": "baseline-not-started", "notes": "可用性、键盘、无障碍和错误提示。" }, { "id": "U-003", "source": "PRD-U-001..004", "priority": "P0", "scope": "R1", "stages": [ "M4", "M5", "M9" ], "accRefs": [ "ACC-Q-004..006", "ACC-L-013", "ACC-X-003", "ACC-X-006" ], "status": "baseline-not-started", "notes": "可用性、键盘、无障碍和错误提示。" }, { "id": "U-004", "source": "PRD-U-001..004", "priority": "P0", "scope": "R1", "stages": [ "M4", "M5", "M9" ], "accRefs": [ "ACC-Q-004..006", "ACC-L-013", "ACC-X-003", "ACC-X-006" ], "status": "baseline-not-started", "notes": "可用性、键盘、无障碍和错误提示。" }, { "id": "Q-001", "source": "验收标准-质量门槛", "priority": "P0/P1", "scope": "R1", "stages": [ "M0", "M5", "M9" ], "accRefs": [ "ACC-Q-001..009", "ACC-X-001..014" ], "status": "baseline-not-started", "notes": "性能、安全、回退、证据完整性和发布门槛;逐项结果在验收证据包中记录。" }, { "id": "Q-002", "source": "验收标准-质量门槛", "priority": "P0/P1", "scope": "R1", "stages": [ "M0", "M5", "M9" ], "accRefs": [ "ACC-Q-001..009", "ACC-X-001..014" ], "status": "baseline-not-started", "notes": "性能、安全、回退、证据完整性和发布门槛;逐项结果在验收证据包中记录。" }, { "id": "Q-003", "source": "验收标准-质量门槛", "priority": "P0/P1", "scope": "R1", "stages": [ "M0", "M5", "M9" ], "accRefs": [ "ACC-Q-001..009", "ACC-X-001..014" ], "status": "baseline-not-started", "notes": "性能、安全、回退、证据完整性和发布门槛;逐项结果在验收证据包中记录。" }, { "id": "Q-004", "source": "验收标准-质量门槛", "priority": "P0/P1", "scope": "R1", "stages": [ "M0", "M5", "M9" ], "accRefs": [ "ACC-Q-001..009", "ACC-X-001..014" ], "status": "baseline-not-started", "notes": "性能、安全、回退、证据完整性和发布门槛;逐项结果在验收证据包中记录。" }, { "id": "Q-005", "source": "验收标准-质量门槛", "priority": "P0/P1", "scope": "R1", "stages": [ "M0", "M5", "M9" ], "accRefs": [ "ACC-Q-001..009", "ACC-X-001..014" ], "status": "baseline-not-started", "notes": "性能、安全、回退、证据完整性和发布门槛;逐项结果在验收证据包中记录。" }, { "id": "Q-006", "source": "验收标准-质量门槛", "priority": "P0/P1", "scope": "R1", "stages": [ "M0", "M5", "M9" ], "accRefs": [ "ACC-Q-001..009", "ACC-X-001..014" ], "status": "baseline-not-started", "notes": "性能、安全、回退、证据完整性和发布门槛;逐项结果在验收证据包中记录。" }, { "id": "Q-007", "source": "验收标准-质量门槛", "priority": "P0/P1", "scope": "R1", "stages": [ "M0", "M5", "M9" ], "accRefs": [ "ACC-Q-001..009", "ACC-X-001..014" ], "status": "baseline-not-started", "notes": "性能、安全、回退、证据完整性和发布门槛;逐项结果在验收证据包中记录。" }, { "id": "Q-008", "source": "验收标准-质量门槛", "priority": "P0/P1", "scope": "R1", "stages": [ "M0", "M5", "M9" ], "accRefs": [ "ACC-Q-001..009", "ACC-X-001..014" ], "status": "baseline-not-started", "notes": "性能、安全、回退、证据完整性和发布门槛;逐项结果在验收证据包中记录。" }, { "id": "Q-009", "source": "验收标准-质量门槛", "priority": "P0/P1", "scope": "R1", "stages": [ "M0", "M5", "M9" ], "accRefs": [ "ACC-Q-001..009", "ACC-X-001..014" ], "status": "baseline-not-started", "notes": "性能、安全、回退、证据完整性和发布门槛;逐项结果在验收证据包中记录。" } ] }