chrysopedia/prompts/stage5_compose.txt
jlightner 709d14802c feat: Created composition prompt with merge rules, citation re-indexing…
- "prompts/stage5_compose.txt"
- ".gsd/milestones/M014/slices/S02/tasks/T01-SUMMARY.md"

GSD-Task: S02/T01
2026-04-03 01:03:01 +00:00

197 lines
No EOL
13 KiB
Text

You are updating an existing Chrysopedia technique page with new source material. A technique page already exists — it was synthesized from earlier video moments. Now new moments from additional videos are available. Your job is to compose a unified page that integrates the new material into the existing page, preserving what's already good while enriching it with genuinely new detail.
This is NOT a rewrite. This is a merge. The existing page has been reviewed and published. Treat its prose as the baseline — preserve its voice, structure, and specific details. Your job is to strengthen it with new information, not to rephrase what's already well-written.
## What you receive
You receive four inputs in XML tags:
1. `<existing_page>` — the current SynthesizedPage JSON (v2 format: body_sections as list of BodySection objects with heading, content, subsections)
2. `<existing_moments>` — JSON array of the key moments that the existing page was built from (indices [0] through [N-1])
3. `<new_moments>` — JSON array of new key moments to integrate (these will be indexed [N] through [N+M-1] in the composed output)
4. `<creator>` — the creator name (same creator as the existing page)
## Citation re-indexing — critical
The composed page uses a unified citation index space across both old and new moments:
- **Existing moments** keep their original indices: `[0]`, `[1]`, ..., `[N-1]` where N is the length of `<existing_moments>`.
- **New moments** are assigned indices starting at N: the first new moment is `[N]`, the second is `[N+1]`, ..., the last is `[N+M-1]` where M is the length of `<new_moments>`.
- All citation markers `[N]` in the existing page prose remain valid and unchanged.
- New citations referencing new moments use the offset indices: if there are 5 existing moments, the first new moment is cited as `[5]`, the second as `[6]`, etc.
- When new information reinforces an existing claim, you may add a new citation alongside the existing one: `[2,7]` means the claim is supported by both existing moment 2 and new moment 7.
**Never renumber existing citations.** The existing `[0]`, `[1]`, etc. in the prose must remain exactly as they are. Only add new `[N+...]` markers where new material contributes.
## Merge rules
### Preserve existing prose
Keep existing section headings, prose, citations, and structure intact unless you have a specific reason to change something. Reasons to change existing prose:
- A new moment directly contradicts an existing claim (explain the contradiction, don't silently overwrite)
- A new moment provides a more specific value for a vague existing claim (update with the specific value and add the new citation)
- A factual error is corrected by new information
### Enrich existing sections with new detail
When new moments cover the same topic as an existing section, integrate the new information INTO that section:
- Add new paragraphs after existing ones (don't insert into the middle of existing paragraphs)
- Add new subsections to existing sections when the new material covers a distinct sub-aspect
- Extend existing paragraphs only by appending new sentences, never by rewriting existing sentences
### Create new sections for genuinely new territory
When new moments cover topics not addressed by any existing section, create new body_sections. Place them in workflow order relative to existing sections (follow the workflow-ordering rule: conceptual framework → core construction → combining/refining → quality checks/validation).
### Section ordering
Maintain the workflow order from the existing page. New sections slot into the correct workflow position — don't just append them at the end. If the existing page has sections for "building layers" and "bus processing", a new section about "shaping individual layers" belongs BETWEEN them, not after "bus processing".
## Deduplication guidance
The most important merge skill is distinguishing enrichment from duplication.
**Enrichment** (DO this): New moment adds a specific value, alternative approach, or deeper explanation to an existing topic.
- Existing: "Use a transient shaper on the click layer to control the attack."
- New moment says: "Set the transient shaper attack to +6dB and sustain to -8dB for maximum snap."
- Composed: "Use a transient shaper on the click layer to control the attack. Set attack to +6dB and sustain to -8dB for maximum snap [7]." ← Added specificity with new citation.
**Enrichment** (DO this): New moment provides a contrasting approach or caveat.
- Existing: "Route the effect at 100% wet on a parallel send."
- New moment says: "In a dense mix, reduce the parallel send to 60-70% wet to avoid phase smearing in the low end."
- Composed: Keep original sentence, add new paragraph: "In denser arrangements, reduce the parallel send to 60-70% wet — full wet routing can introduce phase smearing in the low end that thins out the sub [8]."
**Duplication** (DO NOT do this): New moment restates what's already covered without adding specificity.
- Existing: "OTT at 30% depth on the bus gives you upward compression without crushing dynamics."
- New moment says: "Use OTT on the bus for upward compression, around 30%."
- Action: Skip. The existing prose already covers this with equal or greater specificity. Do not add a redundant sentence.
**The test**: After composing, read each new sentence you added. Does it teach the reader something they couldn't learn from the existing prose? If not, cut it.
## Writing standards
Follow the same voice and tone as the existing page:
- Instructive, not narrative — teach the technique directly
- Direct and confident — no hedging
- Specific and grounded — concrete values, plugin names, settings
- Creator name appears at most once in body_sections content (it's already in the title/summary)
When adding new prose, match the existing page's level of detail and energy. If the existing page is technically dense, your additions should be equally dense. If it uses direct quotes, consider including a quote from the new moments if one is vivid.
## Summary update
Update the summary to reflect the enriched page. The summary should still lead with the most striking insight (which may now come from the new material if it's more compelling). Keep it 2-4 sentences. Don't just append to the existing summary — rewrite it as a unified hook for the composed page.
## Tags and plugins update
- Merge `topic_tags` from existing page and new moments. Deduplicate.
- Merge `plugins` lists. Deduplicate. Keep standard plugin names.
## Signal chains update
- Preserve existing signal chains.
- Add new signal chains only if new moments describe a routing path not already represented.
- If a new moment adds a step to an existing chain, update that chain in place.
## Output format
Return a JSON object with the same SynthesisResult structure (single key "pages" containing a list). The composed page uses the same v2 schema:
```json
{
"pages": [
{
"title": "Technique Name by Creator",
"slug": "technique-name-creator",
"topic_category": "Category",
"topic_tags": ["merged", "deduplicated", "tags"],
"summary": "Updated 2-4 sentence summary reflecting the enriched page.",
"body_sections_format": "v2",
"body_sections": [
{
"heading": "Existing section heading (preserved)",
"content": "Existing prose preserved verbatim. New detail appended with new citation markers [5]. Additional paragraph with enrichment from new moments [6].",
"subsections": [
{
"heading": "Existing subsection (preserved)",
"content": "Original subsection content unchanged [1]."
},
{
"heading": "New subsection from new material",
"content": "New detail that covers a distinct sub-aspect within this section's topic [7]."
}
]
},
{
"heading": "Entirely new section for new territory",
"content": "This section addresses a topic not covered in the existing page. Full prose with citations to new moments [5,8].\n\nSecond paragraph with additional detail [6].",
"subsections": []
}
],
"signal_chains": [],
"plugins": ["Merged", "Plugin", "List"],
"source_quality": "mixed",
"moment_indices": [0, 1, 2, 3, 4, 5, 6, 7, 8]
}
]
}
```
**moment_indices**: Must include ALL indices from both existing and new moments: `[0, 1, ..., N-1, N, N+1, ..., N+M-1]`. Every source moment — old and new — must be accounted for.
**body_sections_format**: Must be `"v2"`.
## Concrete composed example
Given 3 existing moments (indices [0]-[2]) and 2 new moments (indices [3]-[4]):
```json
{
"pages": [
{
"title": "Parallel Bass Processing by Audien",
"slug": "parallel-bass-processing-audien",
"topic_category": "Mixing",
"topic_tags": ["bass", "parallel processing", "saturation", "sub alignment", "stereo width"],
"summary": "Audien's bass chain splits the signal into three parallel paths — clean sub, saturated mid-bass, and a stereo-widened upper layer — then aligns phase at the sum point to avoid cancellation. The saturation path uses Decapitator with the drive backed off to 3.5 to keep harmonics musical rather than aggressive [1,3].",
"body_sections_format": "v2",
"body_sections": [
{
"heading": "Why parallel paths beat inline processing for bass",
"content": "Parallel bass processing routes copies of the bass signal through separate effect chains before summing them, giving independent control over each frequency band's character [0]. Inline processing forces a single chain to handle everything from sub-bass warmth to upper-harmonic presence — any saturation aggressive enough to add grit in the 200-500Hz range will distort the sub fundamental below 80Hz [0].\n\nThe three-path split works as follows: path one is the clean sub (low-passed at 80Hz, no processing beyond a gentle limiter), path two is the saturated mid-bass (bandpassed 80-500Hz through Decapitator), and path three handles stereo width (high-passed at 500Hz through a mid-side widener) [1]. New moments from a follow-up session confirm this routing but add a critical detail: insert a polarity-check plugin on each path before the sum bus [3]. Even small phase drift between the parallel paths can hollow out the 100-200Hz range when summed.",
"subsections": []
},
{
"heading": "Dialing the saturation without killing the sub",
"content": "Decapitator on the mid-bass path at drive 3.5, Style E (tube), with the Punish button off [1]. The low-cut on Decapitator's input is set to 90Hz — slightly above the crossover point — so no sub energy reaches the saturation stage [1].\n\n'If you can hear the saturation as distortion, you've gone too far — it should just feel warmer' [2]. Check in mono: if the bass thins out when you collapse to mono, the saturated path is fighting the clean sub. Pull the drive down or adjust the crossover overlap [2,4].",
"subsections": []
},
{
"heading": "Phase-checking the sum point",
"content": "After setting up the parallel paths, check phase alignment at the sum bus before committing to the mix [3]. Insert a phase correlation meter on the bass sum — the reading should stay above +0.5 during the sustain portion of bass notes. If it dips toward zero or negative, one of the parallel paths has accumulated enough latency to cause partial cancellation [3].\n\nThe fix is simple but easy to forget: add a utility plugin on the faster paths with a sample delay to align all three [4]. Nudge in 1-sample increments while watching the correlation meter. When it peaks, lock it and bypass the meter.",
"subsections": []
}
],
"signal_chains": [
{
"name": "Three-path parallel bass",
"steps": [
"Bass input → 3-band split (80Hz / 500Hz crossovers)",
"Path 1: Low-pass 80Hz → Limiter → Sum bus",
"Path 2: Bandpass 80-500Hz → Decapitator (drive 3.5, Style E, input LC 90Hz) → Sum bus",
"Path 3: High-pass 500Hz → Mid-side widener → Sum bus",
"Sum bus: Phase correlation check → Master chain"
]
}
],
"plugins": ["Soundtoys Decapitator", "FabFilter Pro-Q 3", "Voxengo SPAN"],
"source_quality": "mixed",
"moment_indices": [0, 1, 2, 3, 4]
}
]
}
```
Notice:
- Existing citations `[0]`, `[1]`, `[2]` remain in their original positions.
- New citations `[3]` and `[4]` are added where new moments contribute.
- The first section was enriched with a new paragraph about polarity-checking (from new moment [3]).
- A new third section "Phase-checking the sum point" was created for the genuinely new topic.
- The summary was rewritten to incorporate the new material as a unified hook.
- moment_indices covers all 5 moments: [0, 1, 2, 3, 4].