story(vol05): 完成89至112章与第五卷阅读包

This commit is contained in:
2026-11-01 14:08:44 +08:00
parent a442897755
commit b71fb8dd45
51 changed files with 10502 additions and 47 deletions
+19 -8
View File
@@ -139,7 +139,7 @@ if ($cumulative -ne 75) { $failures.Add("Expected 75 seconds, got $cumulative")
$bodyStart = $scriptText.IndexOf('INT. ')
$scriptChars = if ($bodyStart -ge 0) { [regex]::Replace($scriptText.Substring($bodyStart), '\s', '').Length } else { 0 }
$novelFiles = @(Get-ChildItem -LiteralPath (Join-Path $projectRoot '05_小说创作/03_正文') -Filter '*.md' -File -Recurse | Where-Object { $_.Name -match '^\d{2}_' })
$novelFiles = @(Get-ChildItem -LiteralPath (Join-Path $projectRoot '05_小说创作/03_正文') -Filter '*.md' -File -Recurse | Where-Object { $_.Name -match '^\d+_' })
$novelChars = ($novelFiles | ForEach-Object { [regex]::Replace((Get-Content -LiteralPath $_.FullName -Raw -Encoding UTF8), '\s', '').Length } | Measure-Object -Sum).Sum
$pngCount = @(Get-ChildItem -LiteralPath (Join-Path $projectRoot '06_AI动漫制作') -Filter '*.png' -File -Recurse).Count
@@ -286,21 +286,21 @@ if (($chapterIds -join ',') -ne ((1..24) -join ',')) { $failures.Add('Expected 2
$episodeText = Read-ProjectText '06_AI动漫制作/01_改编开发/02_分集大纲/第一季_12集分集大纲.md'
$episodeIds = @([regex]::Matches($episodeText, '(?m)^\| (\d+) \|') | ForEach-Object { [int]$_.Groups[1].Value })
if (($episodeIds -join ',') -ne ((1..12) -join ',')) { $failures.Add('Expected 12 ordered V03 episode rows') }
# The writing now extends through chapter 68; allow subsequent chapters without
# freezing progress at today's count, while rejecting gaps and duplicate IDs.
$firstVolumeIds = @($novelFiles | Where-Object { $_.Directory.Name -eq '第一卷' } | ForEach-Object { [int]$_.Name.Substring(0, 2) } | Sort-Object)
# Parse complete numeric prefixes beyond chapter 99. Allow further chapters
# without freezing today's total, while rejecting gaps and duplicate IDs.
$firstVolumeIds = @($novelFiles | Where-Object { $_.Directory.Name -eq '第一卷' } | ForEach-Object { [int]($_.Name -split '_', 2)[0] } | Sort-Object)
if (($firstVolumeIds -join ',') -ne ((0..24) -join ',')) {
$failures.Add('Volume one must contain the prologue and chapters 1-24')
}
$draftIds = @($novelFiles | ForEach-Object { [int]$_.Name.Substring(0, 2) } | Sort-Object)
$draftIds = @($novelFiles | ForEach-Object { [int]($_.Name -split '_', 2)[0] } | Sort-Object)
if ($draftIds.Count -lt 69 -or ($draftIds -join ',') -ne ((0..($draftIds.Count - 1)) -join ',')) {
$failures.Add('Novel draft IDs must be unique, continuous from 00 and reach at least chapter 68')
}
$secondVolumeIds = @($novelFiles | Where-Object { $_.Directory.Name -eq '第二卷' } | ForEach-Object { [int]$_.Name.Substring(0, 2) } | Sort-Object)
$secondVolumeIds = @($novelFiles | Where-Object { $_.Directory.Name -eq '第二卷' } | ForEach-Object { [int]($_.Name -split '_', 2)[0] } | Sort-Object)
if (($secondVolumeIds -join ',') -ne ((25..48) -join ',')) {
$failures.Add('Volume two must contain chapters 25-48')
}
$thirdVolumeIds = @($novelFiles | Where-Object { $_.Directory.Name -eq '第三卷' } | ForEach-Object { [int]$_.Name.Substring(0, 2) } | Sort-Object)
$thirdVolumeIds = @($novelFiles | Where-Object { $_.Directory.Name -eq '第三卷' } | ForEach-Object { [int]($_.Name -split '_', 2)[0] } | Sort-Object)
if (($thirdVolumeIds -join ',') -ne ((49..68) -join ',')) {
$failures.Add('Volume three must contain chapters 49-68')
}
@@ -309,7 +309,7 @@ $thirdOutlineIds = @([regex]::Matches($thirdOutline, '(?m)^\| (\d+) \|') | ForEa
if (($thirdOutlineIds -join ',') -ne ($thirdVolumeIds -join ',')) {
$failures.Add('Volume three chapter outline and prose IDs differ')
}
$fourthVolumeIds = @($novelFiles | Where-Object { $_.Directory.Name -eq '第四卷' } | ForEach-Object { [int]$_.Name.Substring(0, 2) } | Sort-Object)
$fourthVolumeIds = @($novelFiles | Where-Object { $_.Directory.Name -eq '第四卷' } | ForEach-Object { [int]($_.Name -split '_', 2)[0] } | Sort-Object)
if ($fourthVolumeIds.Count -gt 0) {
if (($fourthVolumeIds -join ',') -ne ((69..88) -join ',')) {
$failures.Add('Completed volume four must contain chapters 69-88')
@@ -320,6 +320,17 @@ if ($fourthVolumeIds.Count -gt 0) {
$failures.Add('Volume four chapter outline and prose IDs differ')
}
}
$fifthVolumeIds = @($novelFiles | Where-Object { $_.Directory.Name -eq '第五卷' } | ForEach-Object { [int]($_.Name -split '_', 2)[0] } | Sort-Object)
if ($fifthVolumeIds.Count -gt 0) {
if (($fifthVolumeIds -join ',') -ne ((89..112) -join ',')) {
$failures.Add('Completed volume five must contain chapters 89-112')
}
$fifthOutline = Read-ProjectText '05_小说创作/02_章节大纲/第五卷_章节大纲.md'
$fifthOutlineIds = @([regex]::Matches($fifthOutline, '(?m)^\| (\d+) \|') | ForEach-Object { [int]$_.Groups[1].Value })
if (($fifthOutlineIds -join ',') -ne ($fifthVolumeIds -join ',')) {
$failures.Add('Volume five chapter outline and prose IDs differ')
}
}
foreach ($legacy in @(
'06_AI动漫制作/03_分镜与镜头/01_镜头表/S01E01_SC12_75秒试片镜头表.md',
'06_AI动漫制作/04_生成方案/01_图像提示词/S01E01_SC12_关键帧提示词.md',