5.4 KiB
Experiment 57J.75 — Pre-Anchored No-Op Update Live Test
Branch: feature/semantic-action-contract-v0.23
Starting HEAD: 8184e05 (docs: record pre-anchored update apparatus)
Experiment commit: pending (experiment: validate controlled structural no-op live)
Objective
Answer exactly:
Given a deterministic pre-existing graph fixture with a savings-realism anchor already present, does the live model produce
structuralActionRequired = false+ zero meaningful mutation when updating with an answer that preserves the existing uncertainty, and is that accepted?
This is the direct follow-up to 57J.73 (Classification G), where the false + no meaningful mutation → accepted branch was unreachable because Update 1 failed at proposal_compatibility. The apparatus from 57J.74 enables this test via a pre-anchored fixture injected directly into the Update request's situationGraph, bypassing Start entirely.
Hypothesis
If the model receives a pre-anchored graph where the savings-realism unknown already exists, and updates with an answer that preserves (rather than resolves) that uncertainty, it will:
- Declare
structuralActionRequired = false(no new structure needed) - Produce zero meaningful mutation (graph unchanged)
- Be accepted (not rejected by the contract validator, because the v0.23 contract validates
false + zero mutationas a valid intentional no-op)
Tooling
The pre-anchored apparatus from 57J.74 consists of:
- JSON fixture:
tests/fixtures/pre-anchored-update-savings-realism.json— deterministic graph with one unresolved savings-realism unknown - Harness tests:
scripts/reproduce-multi-turn-investigation.harness.test.js— 10 deterministic tests covering anchor count, schema validity, relationship integrity, exact graph injection
The live test sends the fixture's graph directly as the Update request's situationGraph, with an answer that preserves (not resolves) the existing uncertainty.
Test Config
- Fixture: Pre-existing graph with savings-realism unknown (
n_savings_realism, kind=unknown, status=unknown) - Answer: "I am still unsure whether the projected office savings from the relocation are realistic."
- Model: qwen-claude:latest at http://192.168.1.111:11434
- Previous Question: "Are the projected office savings from relocation realistic?" (from fixture)
Results
HTTP status: 200 — update_applied
{
"success": true,
"stage": "update_applied",
"proposal": {
"structuralActionRequired": false,
"answerMeaning": {
"userSupportedMeaning": "The user remains unsure whether the projected office savings from relocation are realistic.",
"possibleInference": "Proceeding with relocation without validated savings projections carries unquantified financial risk.",
"supportCategory": "uncertain",
"resolutionGuidance": "may_resolve"
},
"addedNodes": [],
"updatedNodes": [],
"addedEdges": [],
"resolvedUnknownNodeIds": []
}
}
Graph after Update: Unchanged — still exactly 2 nodes (1 state, 1 unknown) and 1 edge. The savings-realism anchor persisted without modification.
Next Question generated: "What would clarify are the projected office savings from relocation realistic in this situation?"
Evidence Summary
This one controlled run shows that, with an equivalent savings-realism uncertainty already present in the pre-anchored graph, the model directly emitted structuralActionRequired = false, produced zero meaningful mutation (no added/updated nodes or edges), and the production validator accepted the proposal.
Classification: A — INTENTIONAL NO-OP WORKS
All four conditions met:
structuralActionRequired = falseobserved directly in the Update response- Zero meaningful mutation (addedNodes=[], updatedNodes=[], addedEdges=[])
- HTTP 200 / update_applied
- Exactly one equivalent savings-realism uncertainty remained after Update
What this establishes
This controlled run demonstrates that when the model receives a pre-anchored graph with an existing savings-realism unknown and produces an answer preserving that uncertainty, it correctly declares no structural action needed and is accepted by the v0.23 contract validator. The false + zero mutation → accepted path does exist in the contract for pre-anchored inputs.
What this does NOT prove
- Whether
false + zero mutationwould also be accepted for non-anchored graphs (where the model might legitimately need to create structure) - Whether the same answer would produce different results starting from a clean Start (i.e., whether cold-start dynamics change the outcome)
- Stability across repeated runs — only one test run was performed
- Whether this generalizes to other types of anchors beyond savings-realism
What remains unproven
- Cold-start comparison: Run the same answer through normal Start→Update to compare whether the starting state changes the model's structural-action judgment.
- Different anchors: Test with different pre-anchored graphs (e.g., risk-constraint anchor, timeline anchor) to verify generalization.
Production code changed: NO
No production logic changed. Only deterministic harness tests from 57J.74 were used as the test apparatus.
Harness restored: YES
Scenario, answers, and maxUpdates in scripts/reproduce-multi-turn-investigation.mjs remain at canonical defaults. No fixture mode was committed to the harness.