| name | lucy-ng:supervisor |
| description | Orchestrates all lucy-ng workflows. Routes to dereplication, CASE, sanitize. For CASE: spawns CASE agent, monitors progress via CASE-PROGRESS.md, detects unproductive loops (ELIM thrashing, zero-solution loops, solution explosion, constraint churning), diagnoses root causes, and intervenes with specific advisory constraints. Escalates to user after 10 failed interventions.
|
lucy-ng Supervisor
The supervisor is the single entry point for ALL lucy-ng invocations. It routes to specialist skills based on user intent and, for CASE workflows, monitors the CASE agent's progress to detect and remediate unproductive loops.
1. Overview and Role
Single Entry Point
The supervisor handles all lucy-ng invocations:
- Sanitize requests → bash CLI (
lucy sanitize)
- Dereplication only → bash CLI (
lucy dereplicate c13)
- Full CASE → spawn CASE agent via Task tool
Users interact only with the supervisor. The supervisor delegates to specialists.
CASE Supervision Architecture
For full CASE workflows, the supervisor:
- Spawns a CASE agent as a subagent via the Task tool
- Instructs the CASE agent to write CASE-PROGRESS.md after each LSD iteration
- Reads CASE-PROGRESS.md to monitor solution counts, constraints, and iteration history
- Detects loop patterns (Section 4)
- Diagnoses root causes from the progress log
- Intervenes with advisory constraints (tells CASE agent WHAT to fix, not HOW)
- Tracks intervention count per pattern
- Escalates to user after 10 failed intervention cycles with the same pattern
Note: The supervisor performs basic diagnosis for initial loop detection. For complex failures requiring deep LSD analysis, the supervisor can delegate to the diagnostic specialist (see Section 5).
Advisory Intervention Model
The supervisor provides advisory guidance rather than directive commands:
- Advisory: "sp2 count issue detected — verify sp2 count is even before retrying"
- NOT directive: "Change line 15 of compound.lsd from
MULT 5 C 2 1 to MULT 5 C 3 1"
The CASE agent retains autonomy to decide HOW to implement the fix. The supervisor constrains WHAT must be addressed.
2. Routing Logic
Use this decision tree to route user requests:
Is this for blind CASE evaluation on public data?
├─ YES → Use bash: `lucy sanitize <path>`
│ (After sanitization, start fresh session for unbiased CASE)
└─ NO → Continue
Does the user want database matching first?
├─ YES → Use bash: `lucy dereplicate c13 <path> <formula>`
│ ├─ Match found (score ≥ 0.95)? → Report and DONE
│ └─ No match? → Proceed to full CASE
└─ NO (skip straight to CASE) → Proceed to full CASE
Full CASE workflow:
└─ Spawn CASE agent via Task tool with compound path, formula, and progress logging instructions
Default behavior: If user provides compound path and formula without specifying dereplication/CASE, perform dereplication first, then CASE if no match found.
Routing implementation:
- Sanitize and dereplication: Execute directly via bash CLI (synchronous, quick)
- Full CASE: Spawn CASE agent via Task tool (asynchronous, multi-iteration, requires monitoring)
3. CASE Workflow Supervision
Spawning the CASE Agent
When routing to full CASE, spawn a CASE agent with these instructions:
Perform CASE workflow for compound at <path> with formula <formula>.
Write CASE-PROGRESS.md in the compound directory after EVERY LSD iteration.
Include in each iteration entry:
- Iteration number and brief description
- Timestamp
- LSD file reference
- Solution count
- Constraints added (list each with reasoning)
- Constraints removed (list each with reasoning)
- WHY: natural language explanation of strategy
- Constraint effectiveness: % reduction, "baseline", or "over-constrained"
- Confidence: qualitative assessment (too many solutions / converging / stuck)
- HMBC correlations used: X/Y (running total)
- Notes: sp2 count check, H budget check, other observations
Follow incremental HMBC strategy from skill/SKILL.md Section 7.
Stop when solution count ≤ 10 or after ~20 iterations maximum.
See Section 8 for the complete CASE-PROGRESS.md format specification.
Monitoring Progress
After the CASE agent completes an iteration batch (or returns control), the supervisor:
- Reads CASE-PROGRESS.md to get the full iteration history
- Checks for loop patterns (Section 4)
- If no loop detected: Allow CASE agent to continue
- If loop detected:
- Diagnose root cause from the progress log (Section 4)
- Advise CASE agent with specific constraints
- Increment intervention counter for this pattern
- If intervention count ≥ 10 for this pattern → escalate to user (Section 6)
Advisory Constraints
When a loop is detected, the supervisor provides diagnostic guidance that constrains the next retry without dictating exact implementation. Examples:
For ELIM thrashing:
ELIM thrashing detected. Before retrying:
1. Verify sp2 count is even (see skill/SKILL.md Section 5.3)
2. Verify hydrogen budget matches formula
3. Check last batch of HMBC correlations for 1J artifacts
(compare against HSQC positions)
Do NOT add ELIM again until all three checks pass.
For zero-solution loop:
Zero-solution loop detected (3 consecutive iterations with 0 solutions).
Diagnose:
1. Remove last HMBC batch
2. Confirm solutions return
3. Test each correlation individually to find the conflict
4. Check if any carbons are within 3 ppm (could be misassigned)
For solution explosion:
Solution explosion stalled (3 iterations, <10% reduction each, still >100 solutions).
Check:
1. Remove ELIM if present
2. Verify recent HMBC correlations connect NEW fragments (not already-connected atoms)
3. Add heteroatom constraints (BOND or LIST/PROP for O, N atoms)
4. Check quaternary carbons — add shift-based constraints if 0 HMBC correlations
For constraint churning:
Constraint churning detected (high add/remove activity without convergence).
Reset to last known-good state (iteration with lowest non-zero solution count).
Follow incremental HMBC strategy: select 3-5 HIGH-CONFIDENCE correlations
(isolated carbon shifts, unique proton assignments, strong intensity).
Do not add/remove randomly.
4. Loop Detection Patterns
Four loop patterns trigger supervisor intervention. Each has: definition, detection criteria, diagnostic procedure, and advisory message template.
4.1 ELIM Thrashing (SUPV-02)
Definition: Adding or removing ELIM repeatedly without diagnosing the root cause.
Detection criteria:
| Trigger | Description |
|---|
| ELIM added 2+ times | CASE-PROGRESS.md shows "ELIM" in constraints added in 2 or more iterations |
| ELIM cycling | ELIM added, then removed, then added again |
Diagnostic procedure:
- Check sp2 count is even (skill/SKILL.md Section 5.3 Hybridization Rules)
- Count all
MULT commands with hybridization = 2 (sp2)
- If count is odd, ELIM will fail — fix hybridization assignments first
- Check hydrogen budget matches molecular formula
- Sum all H-counts from
MULT commands
- Compare to formula
- Check for 1J artifacts in HMBC (skill/SKILL.md Section 2.3 Artifact Recognition)
- Compare last batch of HMBC correlations against HSQC positions
- If HMBC peak within ±1.5 ppm (C) and ±0.3 ppm (H) of HSQC → likely 1J artifact
- Exclude 1J artifacts before retrying
- Check for close carbons causing ambiguous HMBC assignment
- Look for carbons within 3 ppm in 13C spectrum
- If present, use LIST/PROP to encode ambiguity (skill/SKILL.md Section 10.2)
Advisory message:
ELIM thrashing detected. Before retrying:
1. Verify sp2 count is even (see skill/SKILL.md Section 5.3 Hybridization Rules)
2. Verify hydrogen budget matches formula
3. Check last batch of HMBC correlations for 1J artifacts
(compare against HSQC positions per skill/SKILL.md Section 2.3)
4. Check for close carbons (within 3 ppm) causing ambiguous assignment
Do NOT add ELIM again until all checks pass.
4.2 Zero-Solution Loop (SUPV-03)
Definition: Three or more consecutive iterations returning 0 solutions without changing approach.
Detection criteria:
| Trigger | Description |
|---|
| 3+ consecutive 0s | CASE-PROGRESS.md shows 3 or more consecutive iterations with solution_count = 0 |
| Same approach | Constraints added/removed follow same pattern (e.g., keep adding HMBC without removing any) |
Diagnostic procedure:
- Remove last batch of constraints and confirm solutions return
- This identifies which batch caused over-constraint
- Test individual correlations from the failed batch
- Add them back one at a time
- Identify which specific correlation causes 0 solutions
- Check for conflicting correlations
- 1J artifacts (compare HMBC to HSQC)
- Incorrect carbon assignment (close peaks, overlapping signals)
- Incorrect proton assignment
- Check molecular formula correctness
- If formula is wrong, all constraints may be invalid
- Check for close carbons within 3 ppm
- Digital resolution may not distinguish them (skill/SKILL.md Section 2.2)
- Use LIST/PROP for ambiguity
Advisory message:
Zero-solution loop detected (3 consecutive iterations with 0 solutions).
Diagnose:
1. Remove last HMBC batch
2. Confirm solutions return
3. Test each correlation individually to find the conflict
4. Check if any carbons are within 3 ppm (could be misassigned due to digital resolution)
5. Check for 1J artifacts (compare HMBC to HSQC per skill/SKILL.md Section 2.3)
Only re-add correlations after resolving the conflict.
4.3 Solution Explosion (SUPV-04)
Definition: Three or more consecutive iterations with solution count > 100 and < 10% reduction each.
Detection criteria:
| Trigger | Description |
|---|
| 3+ iterations at >100 | Recent 3 iterations all have solution_count > 100 |
| <10% reduction each | Each iteration reduces count by less than 10% compared to previous |
Diagnostic procedure:
- Check if ELIM is present
- If yes, remove it — ELIM increases solution space
- Check if added correlations are actually constraining
- Are they connecting atoms that are already connected?
- Are they redundant with existing constraints?
- Check quaternary carbons
- Quaternary carbons with 0 HMBC correlations don't constrain structure
- See skill/SKILL.md Section 10.3 for quaternary carbon handling
- Add shift-based constraints or targeted HMBC search
- Check heteroatom constraints
- Are O, N positions specified? (BOND or LIST/PROP commands)
- Heteroatom positions strongly constrain solutions
Advisory message:
Solution explosion stalled (3 iterations, <10% reduction each, still >100 solutions).
Check:
1. Remove ELIM if present
2. Verify recent HMBC correlations connect NEW fragments (not already-connected atoms)
3. Add heteroatom constraints:
- Use BOND for known positions (e.g., carbonyl O bonded to specific C)
- Use LIST/PROP for ambiguous positions (see skill/SKILL.md Section 10.2)
4. Check quaternary carbons — if 0 HMBC correlations, add shift-based constraints
(see skill/SKILL.md Section 10.3)
Focus on high-leverage constraints that separate structural classes.
4.4 Constraint Churning (SUPV-05)
Definition: Adding and removing constraints randomly without convergence over 5+ iterations.
Detection criteria:
| Trigger | Description |
|---|
| 5+ recent iterations | Look at last 5 iterations in CASE-PROGRESS.md |
| High add/remove activity | >10 constraints added AND >5 constraints removed across those iterations |
| No convergence | Solution count still > 50 in most recent iteration |
Diagnostic procedure:
- Check if systematic strategy is being followed
- skill/SKILL.md Section 7 specifies incremental HMBC strategy
- Are correlations being added in batches of 3-5?
- Are batches selected by confidence criteria (isolated carbons, unique protons)?
- Check if correlations are selected randomly or by criteria
- Random selection → churning
- Criteria-based (intensity, isolation, quaternary) → systematic
- Check molecular formula correctness
- If formula is wrong, no strategy will converge
Advisory message:
Constraint churning detected (high add/remove activity without convergence).
Reset to last known-good state (iteration with lowest non-zero solution count).
Follow incremental HMBC strategy from skill/SKILL.md Section 7:
1. Select 3-5 HIGH-CONFIDENCE correlations per batch:
- Isolated carbon shifts (>3 ppm from nearest neighbor)
- Unique proton assignments
- Strong peak intensities (top quartile)
2. Add batch, run LSD, evaluate effectiveness
3. If reduction ≥ 30%, continue with next batch
4. If reduction < 10%, re-evaluate selection criteria
Do NOT add/remove randomly. Be systematic.
5. Diagnostic Specialist Delegation
When basic supervisor diagnosis (Section 4 procedures) is insufficient, delegate to the diagnostic specialist for deep root cause analysis.
When to Delegate
Threshold criteria for delegation:
-
After 2 failed supervisor interventions with the SAME loop pattern
- Supervisor diagnosed, advised CASE agent, but pattern recurred twice
- Basic diagnosis is not resolving the issue
-
When ALL basic checks pass but CASE agent is still stuck
- sp2 count is even ✓
- H budget correct ✓
- No obvious 1J artifacts ✓
- But still getting 0 solutions or 1000+ solutions
-
When constraint churning persists after reset to known-good state
- Supervisor advised reset + incremental strategy
- Churning continues despite following guidance
When NOT to delegate:
- Routine iterations — CASE agent progressing normally
- First detection of a loop pattern — supervisor basic diagnosis is sufficient
- When root cause is obvious from basic checks (e.g., odd sp2 count — no specialist needed)
How to Spawn Diagnostic Specialist
Use the Task tool with this template:
Task(
agent_type="diagnostic-specialist",
instructions="Analyze LSD failure for compound at <compound_path>.
Read:
- <compound_path>/CASE-PROGRESS.md (iteration history)
- <compound_path>/<filename>.lsd (latest LSD file)
Failure type: <0 solutions | 1000+ solutions>
Run systematic diagnostic checks per skill/diagnostic/SKILL.md.
Document ALL checks (PASS and FAIL).
Identify root cause with evidence.
Write structured report to <compound_path>/DIAGNOSTIC-REPORT.md.
Include: findings, root cause, recommended fixes with LSD command examples.
Rate all findings and recommendations as HIGH/MEDIUM/LOW confidence.
"
)
Inputs to provide:
- Compound path (working directory)
- Latest LSD filename
- Failure type (0 solutions, 1000+ solutions, or other)
- CASE-PROGRESS.md path for iteration history
After Diagnostic Specialist Completes
-
Read DIAGNOSTIC-REPORT.md from the compound directory
-
Extract root cause from "## Root Cause" section
- Identifies PRIMARY cause and any contributing factors
- Includes mechanism explaining WHY it caused failure
-
Extract primary fix from "## Recommended Fixes" section
- Look for fix marked PRIMARY
- Contains specific LSD command examples
- Includes verification steps
-
Formulate diagnostic-informed advisory for CASE agent:
- Reference the diagnostic report: "See DIAGNOSTIC-REPORT.md for full analysis"
- Include the specific fix action with LSD command examples from report
- Include verification steps from report
- Example:
Diagnostic specialist identified root cause: 1J artifact in HMBC C155.2-H2.1.
See DIAGNOSTIC-REPORT.md for full analysis.
Fix: Remove HMBC correlation C155.2-H2.1 from LSD file.
This correlation is within artifact tolerance (±1.5 ppm C, ±0.3 ppm H) of HSQC position.
Verification: After removal, re-run LSD. Expect solutions > 0.
Also review other iteration 3 correlations (C155.2-H4.3, C172.4-H2.1) for artifacts.
-
Re-spawn CASE agent with the diagnostic-informed advisory
DIAGNOSTIC-REPORT.md Retention
Rationale: Single DIAGNOSTIC-REPORT.md keeps compound directory clean. Progress log provides timeline context.
Escalation After Diagnostic Specialist
If diagnostic specialist's recommended fix is applied but problem persists:
-
Counts toward per-pattern escalation limit
- Specialist-informed intervention = 1 cycle
- Total limit = 10 cycles (basic + specialist-informed combined)
-
Escalate after 10 total intervention cycles
- Pattern same: ELIM thrashing, zero-solution loop, solution explosion, or constraint churning
- Escalation includes all attempted diagnostics
-
Include diagnostic report reference in escalation:
## CASE Escalation Required
**Compound:** <path>
**Formula:** <formula>
**Pattern:** <pattern name>
**Intervention attempts:** 10 (including 3 diagnostic specialist analyses)
### Diagnostic Specialist Analysis
Latest diagnostic report available at: DIAGNOSTIC-REPORT.md
Recommended fixes attempted:
1. <Fix 1 from diagnostic>
2. <Fix 2 from diagnostic>
All fixes applied, but pattern persists.
### Supervisor Recommendation
<Recommendation based on diagnostic findings>
Cross-Reference
For the diagnostic specialist's domain knowledge (LSD manual, systematic check procedures, diagnostic report format), see skill/diagnostic/SKILL.md.
Do NOT duplicate diagnostic procedures here. The supervisor delegates; the specialist executes.
6. Convergence Criteria
Solution Count Trends
A successful CASE workflow shows decreasing solution counts over iterations:
- Baseline (MULT + HSQC only): hundreds to thousands
- After batch 1 (high-confidence HMBC): tens to low hundreds
- After batch 2-3: single digits to low tens
- Final: 1-10 solutions
Warning signs:
- Solution count increasing → likely ELIM added incorrectly
- Solution count plateaued at high values (>50) → insufficient constraints or ineffective correlations
Constraint Effectiveness
Each batch of added constraints should change the solution set:
- Effective batch: ≥ 30% reduction in solution count
- Marginally effective: 10-30% reduction
- Ineffective: < 10% reduction (correlations may be redundant or incorrect)
Over-constrained: 0 solutions (one or more constraints is incorrect)
Flexible Success Targets
Ideal: 1-5 solutions with top-ranked candidate having high confidence
Acceptable: < 10 solutions with top-ranked candidate well-differentiated by MAE score
Conditional: 10-20 solutions MAY be acceptable if:
- Ranking clearly separates best candidates (MAE gap ≥ 2 ppm between rank 1 and rank 2)
- Top candidate has high confidence score (skill/SKILL.md Section 11)
Not acceptable: > 20 solutions or plateau at any count > 10 without ranking differentiation
Hard Safety Cap
Maximum ~20 total LSD iterations. If this limit is reached:
- Report best result from current solutions
- Rank by 13C prediction (skill/SKILL.md Section 8)
- Document why convergence failed
- Escalate to user with diagnostic summary
Plateau Handling
Plateau at ≤ 10 solutions with good ranking differentiation:
- Declare convergence (STOP)
- Rank solutions
- Report top candidate(s)
Plateau at > 10 solutions:
- Try additional strategies:
- Add heteroatom constraints (BOND or LIST/PROP for O, N positions)
- Add symmetry constraints (if applicable)
- Try different HMBC batch (quaternary carbons, weaker correlations)
- If plateau persists after 2-3 additional strategies → treat as safety cap scenario
7. Intervention Tracking and Escalation
Per-Pattern Tracking
The supervisor tracks intervention count separately for each loop pattern:
- ELIM thrashing: count_elim
- Zero-solution loop: count_zero
- Solution explosion: count_explosion
- Constraint churning: count_churning
Counts are NOT global. Different patterns have different root causes.
Intervention Cycle
Each cycle consists of:
- Detect loop pattern from CASE-PROGRESS.md
- Diagnose root cause using pattern-specific procedure (Section 4)
- Advise CASE agent with specific constraints
- Increment intervention counter for this pattern
- CASE agent retries with advisory constraints
- Supervisor monitors next iteration
Escalation After 10 Cycles
If the same pattern is detected 10 times (10 failed intervention cycles), escalate to user.
Escalation report format:
## CASE Escalation Required
**Compound:** <path>
**Formula:** <formula>
**Pattern:** <pattern name>
**Intervention attempts:** 10
### What Was Detected
<Description of the loop pattern>
### Diagnostics Attempted
1. <First diagnostic approach>
2. <Second diagnostic approach>
...
### Current State
- Solution count: <count>
- HMBC correlations used: X/Y
- Iterations completed: N
### Supervisor Recommendation
<What the supervisor recommends the user investigate>
Examples:
- "Molecular formula may be incorrect — verify HRMS data"
- "HMBC spectrum quality is insufficient for automated elucidation — consider re-acquisition"
- "Structure may have unusual features (e.g., long-range ⁴J correlations) not handled by standard strategy"
Non-Pattern Escalation Triggers
Also escalate immediately (without iteration) for:
- Conflicting data between experiments (e.g., DEPT shows 10 carbons, 13C shows 13 with no symmetry explanation)
- Unusual chemical shifts outside normal ranges (e.g., carbonyl at 50 ppm, aliphatic at 200 ppm)
- Molecular formula does not match observed data (e.g., formula has 13 C, only 8 signals observed, no symmetry detected)
8. CASE-PROGRESS.md Format Specification
Purpose
CASE-PROGRESS.md is the communication interface between the CASE agent and the supervisor. The CASE agent writes it after every iteration; the supervisor reads it to detect loops.
Format: Markdown with structured sections (human-readable, AI-parseable)
Location: Compound's working directory (next to LSD files and spectra)
Rule: Append-only — each iteration APPENDS a new section; NEVER overwrite previous iterations
File Structure
# CASE Progress Log
**Compound:** <compound_path>
**Formula:** <molecular_formula>
**Started:** <timestamp>
**CASE Agent:** <agent_identifier>
---
## Iteration 1: <brief description>
**Time:** <timestamp>
**LSD file:** <filename>.lsd
**Solution count:** <count>
**Constraints added:**
- <constraint with reasoning>
- <constraint with reasoning>
(or "None" if baseline run)
**Constraints removed:**
- <constraint with reasoning>
(or "None")
**Why:** <natural language explanation of what was done and WHY>
**Constraint effectiveness:** <% reduction from previous | "baseline" | "over-constrained (0 solutions)">
**Confidence:** <qualitative assessment: too many solutions / converging / stuck / etc.>
**HMBC correlations used:** X/Y
**Notes:**
- sp2 count: <N> (<even/odd>) <✓ check / ⚠ warning>
- H budget: <matches / mismatch>
- <other observations>
---
## Iteration 2: <brief description>
**Time:** <timestamp>
**LSD file:** <filename>.lsd
**Solution count:** <count>
**Constraints added:**
- <constraint with reasoning>
**Constraints removed:**
- <constraint with reasoning>
(or "None")
**Why:** <natural language explanation>
**Constraint effectiveness:** <e.g., "65% reduction (1234 → 432)">
**Confidence:** <qualitative assessment>
**HMBC correlations used:** X/Y
**Notes:**
- <observations>
---
[Additional iterations continue in same format]
Required Fields
Every iteration entry MUST include:
| Field | Purpose |
|---|
| Iteration N: description | Brief label (e.g., "Baseline", "Add high-confidence HMBC batch 1") |
| Time | Timestamp for tracking |
| LSD file | Which file produced this result |
| Solution count | Primary convergence metric |
| Constraints added | List each individually with reasoning |
| Constraints removed | List each individually with reasoning (or "None") |
| Why | Natural language explanation of strategy — NOT just "what" but "why" |
| Constraint effectiveness | Quantitative measure of batch impact |
| Confidence | Qualitative assessment of current state |
| HMBC correlations used | Running total (X used / Y available) |
| Notes | sp2 check, H budget, other critical observations |
Example: 3-Iteration Log
# CASE Progress Log
**Compound:** data/compound/virgiline
**Formula:** C16H21NO2
**Started:** 2026-02-07 14:32:15
**CASE Agent:** general-purpose
---
## Iteration 1: Baseline (MULT + HSQC only)
**Time:** 14:32:45
**LSD file:** virgiline-01.lsd
**Solution count:** 1,234
**Constraints added:** None (baseline run)
**Constraints removed:** None
**Why:** Establish unconstrained baseline before adding HMBC correlations. Verify atom definitions and HSQC correlations are correct.
**Constraint effectiveness:** N/A (baseline)
**Confidence:** Too many solutions (under-constrained)
**HMBC correlations used:** 0/43
**Notes:**
- sp2 atom count: 8 (even) ✓
- Hydrogen budget: 21 H (matches formula) ✓
- All protonated carbons have HSQC ✓
---
## Iteration 2: Add high-confidence HMBC batch 1
**Time:** 14:35:12
**LSD file:** virgiline-02.lsd
**Solution count:** 187
**Constraints added:**
- HMBC C155.2-H7.8 (isolated carbon, unique proton)
- HMBC C138.5-H3.2 (isolated carbon, intensity top quartile)
- HMBC C127.3-H7.8 (aromatic CH, strong correlation)
- HMBC C129.8-H3.2 (aromatic CH)
- HMBC C172.4-H7.8 (quaternary C=O, connects fragments)
**Constraints removed:** None
**Why:** Selected 5 correlations with isolated carbon shifts (>3 ppm from nearest neighbor) and unique proton assignments. Quaternary C172.4 is especially valuable for structure connectivity.
**Constraint effectiveness:** 85% reduction (1234 → 187), highly effective
**Confidence:** Medium (still need more constraints to narrow to <10 solutions)
**HMBC correlations used:** 5/43
**Notes:**
- All 5 correlations from top quartile of peak intensities
- No overlapping carbon or proton assignments
- Solution count decreased significantly → batch is productive
---
## Iteration 3: Add quaternary carbon HMBC batch
**Time:** 14:38:05
**LSD file:** virgiline-03.lsd
**Solution count:** 0
**Constraints added:**
- HMBC C155.2-H2.1 (quaternary carbon connection)
- HMBC C155.2-H4.3 (quaternary carbon connection)
- HMBC C172.4-H2.1 (carbonyl to proton)
**Constraints removed:** None
**Why:** Connect quaternary carbons C155.2 and C172.4 to structure fragments.
**Constraint effectiveness:** Over-constrained (187 → 0)
**Confidence:** Stuck — last batch caused conflict
**HMBC correlations used:** 8/43
**Notes:**
- ⚠ Problem detected: Likely 1J artifact or ambiguous carbon assignment
- Action needed: Remove last batch, investigate conflicting correlations
- Check C155.2 for close neighbors (may be within 3 ppm of another carbon)
---
Format Notes
- Constraints added/removed: List each constraint individually. Include reasoning, not just "HMBC 5 10" but "HMBC C155.2-H7.8 (isolated carbon, unique proton)".
- Why field: Must explain reasoning, not just restate what was done. "Selected isolated carbons because..." not "Added 5 HMBC correlations".
- Notes section: Always include sp2 check (even/odd) and H budget (matches/mismatch). These are critical for ELIM thrashing detection.
- Append-only: NEVER overwrite the file. Each iteration adds a new
## Iteration N: section.
For CASE domain knowledge (NMR background, peak picking, symmetry, dereplication, LSD reference, incremental HMBC strategy, ranking, error tolerance, confidence scoring), see skill/SKILL.md.