73 lines
4.1 KiB
Markdown
73 lines
4.1 KiB
Markdown
# Experiment 57J.43 — Remove Surviving Semantic-Only/No-Op Prompt Conflict
|
|
|
|
**Branch:** `feature/semantic-to-mutation-contract-v0.18`
|
|
**Starting HEAD:** `0c477adea99c8b6532cd0482fd7f1a41b6afbaee` (frozen v0.17)
|
|
**Production commit:** `359ccc4` prompt: remove semantic-only mutation conflict
|
|
|
|
## Objective
|
|
|
|
Apply the smallest proven correction from 57J.42's diagnosis: replace the two conflicting Additional Guidance bullets so that no surviving instruction tells the model it may preserve semantic meaning with an empty graph mutation when rule #6's structural-mutation MUST rule applies.
|
|
|
|
Not solving update-vs-add action selection (confirmed unresolved by 57J.42).
|
|
|
|
## What Was Changed
|
|
|
|
### Prompt (lib/graph/prompt-builder.js, Additional Guidance)
|
|
|
|
**Replaced two bullets:**
|
|
|
|
```
|
|
- If the answer does not justify a change, return empty arrays for every category.
|
|
- Use answerMeaning to preserve the answer's direct meaning even when the graph change remains unresolved.
|
|
```
|
|
|
|
**With three conditional bullets:**
|
|
|
|
```
|
|
- If rule #6 does not apply (the answer contains no user-supported meaning that requires graph progress) and there is no other justification for change, return empty arrays for every category.
|
|
- If rule #6 applies but you choose an update/refinement of existing structure, resolve an existing unknown, or add justified new structure, your structural proposal plus answerMeaning together represent the complete response — answerMeaning preserves semantic fidelity while structural mutation handles graph progress; neither replaces the other.
|
|
- If you add a new unknown with addedNodes, connect it with at least one addedEdge to an existing updated/resolved node or to a newly added non-unknown node from the answer.
|
|
```
|
|
|
|
### Tests (tests/graph/prompt-builder.test.js)
|
|
|
|
Added 7 focused tests:
|
|
|
|
| # | Test | Coverage |
|
|
|---|------|----------|
|
|
| 1 | no direct contradiction remains | Both MUST and empty-array permission must coexist with rule #6 as a condition on the permission |
|
|
| 2 | legitimate true no-op preserved | Empty arrays still allowed when rule #6 does not apply |
|
|
| 3 | answerMeaning is not structural progress | Must reference "semantic fidelity" not "graph change remains unresolved" |
|
|
| 4 | duplicate protection preserved | Rule #4, #11 + AG preference for updates intact |
|
|
| 5 | update/refine route preserved | update/refinement still listed as valid option in both rule #6 and Additional Guidance |
|
|
| 6 | possibleInference separation preserved | Rule #27 untouched; Additional Guidance does not reference possibleInference for mutation trigger |
|
|
| 7 | no action-selection machinery added | No keyword routing, node-kind decision table, or provider-specific paths introduced |
|
|
|
|
## Test Results
|
|
|
|
- prompt-builder.test.js: **22/22 pass** (7 new + 15 pre-existing)
|
|
- utils.test.js: **68/68 pass** (pre-existing regression)
|
|
- apply-proposal.test.js: **64/64 pass** (pre-existing regression)
|
|
- Total: **154 tests, 0 failures**
|
|
|
|
## What This Guarantees
|
|
|
|
1. The empty-array permission in Additional Guidance is now explicitly conditioned on rule #6 not applying — eliminating the MUST vs PERMIT contradiction diagnosed in Pattern E of 57J.42.
|
|
2. `answerMeaning` can no longer be interpreted as substituting for graph mutation, because the corrected bullet explicitly separates semantic fidelity from structural mutation.
|
|
3. All existing contracts are preserved: duplicate avoidance, genuinely-new-concepts protection, fidelity/inference separation, traceability, update/refine preference.
|
|
|
|
## What Is Intentionally Left Unresolved
|
|
|
|
1. **Action selection under rule #6** — when rule #6 applies and multiple structural paths exist (update vs add), the prompt still does not provide decision criteria. This was confirmed by 57J.42 as a separate ambiguity from Pattern E.
|
|
2. **Live production validation** — this commit only corrects the prompt text and tests; whether the corrected prompt produces compliant proposals in practice requires a live regression pass (next experiment).
|
|
|
|
## Stop Conditions Met
|
|
|
|
- No validators changed
|
|
- No schema changed
|
|
- No semantic classifiers added
|
|
- No provider-specific logic added
|
|
- No action-selection machinery added
|
|
|
|
## Documentation Updated: YES
|