Bug Description
When ponytail and caveman are both active, they both inject additionalContext on UserPromptSubmit. The model receives two contradictory style instruction sets every turn:
- Caveman:
"CAVEMAN MODE ACTIVE (full). Drop articles/filler/pleasantries/hedging. Fragments OK."
- Ponytail:
"PONYTAIL MODE ACTIVE (full). The ladder enforced. Stdlib and native first."
Previous issues (#18, #68, #193) asked "can they coexist?" and were closed with "yes, they stack". But the actual bug is that both plugins inject per-turn style reminders simultaneously, causing the model to receive contradictory instructions about output style. This results in unpredictable, inconsistent outputs.
What caveman already does
Caveman PR #577 added conflict detection: when ponytail (or other compression plugins) is detected in settings.json, caveman reduces its per-turn injection to a one-liner instead of the full ruleset. But ponytail does NOT reciprocate — it always injects its full ruleset regardless of whether caveman is active.
Proposed Fix
In ponytail-mode-tracker.js, before emitting the per-turn additionalContext, check settings.json for known compression plugins (caveman, etc.). If detected, reduce the per-turn injection to a minimal one-liner:
PONYTAIL MODE ACTIVE (full) — reduced injection (another compression plugin detected). Ponytail rules still apply per SessionStart injection.
The SessionStart full ruleset is unchanged — ponytail rules still apply, just the per-turn reinforcement is reduced to avoid contradictory instructions.
This mirrors the approach caveman already uses in its detectCompressionConflict() function.
Testing
With caveman installed in settings.json:
- Before: model receives both
"CAVEMAN MODE ACTIVE (full). Drop articles..." AND "PONYTAIL MODE ACTIVE (full). The ladder enforced..." every turn → contradictory instructions
- After: model receives
"CAVEMAN MODE ACTIVE (full) — reduced injection" + ponytail full injection = no contradiction
Bug Description
When ponytail and caveman are both active, they both inject
additionalContextonUserPromptSubmit. The model receives two contradictory style instruction sets every turn:"CAVEMAN MODE ACTIVE (full). Drop articles/filler/pleasantries/hedging. Fragments OK.""PONYTAIL MODE ACTIVE (full). The ladder enforced. Stdlib and native first."Previous issues (#18, #68, #193) asked "can they coexist?" and were closed with "yes, they stack". But the actual bug is that both plugins inject per-turn style reminders simultaneously, causing the model to receive contradictory instructions about output style. This results in unpredictable, inconsistent outputs.
What caveman already does
Caveman PR #577 added conflict detection: when ponytail (or other compression plugins) is detected in
settings.json, caveman reduces its per-turn injection to a one-liner instead of the full ruleset. But ponytail does NOT reciprocate — it always injects its full ruleset regardless of whether caveman is active.Proposed Fix
In
ponytail-mode-tracker.js, before emitting the per-turnadditionalContext, checksettings.jsonfor known compression plugins (caveman, etc.). If detected, reduce the per-turn injection to a minimal one-liner:The SessionStart full ruleset is unchanged — ponytail rules still apply, just the per-turn reinforcement is reduced to avoid contradictory instructions.
This mirrors the approach caveman already uses in its
detectCompressionConflict()function.Testing
With caveman installed in settings.json:
"CAVEMAN MODE ACTIVE (full). Drop articles..."AND"PONYTAIL MODE ACTIVE (full). The ladder enforced..."every turn → contradictory instructions"CAVEMAN MODE ACTIVE (full) — reduced injection"+ ponytail full injection = no contradiction