Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
This document summarizes notable updates since February 2025, with commit dates from the repository history for context.【728428†L1-L48】

## 2026-07
- **UX (2.1.3):** Submitting the "Is this English sentence confusing or unclear?" report on an english-to-LTL question now acknowledges the feedback instead of silently closing the modal: a persistent note appears under the question ("Thank you for your feedback. Please answer with your best-guess interpretation of the sentence."), announced to screen readers via `role="status"`. A failed submission now alerts the student instead of logging only to the console.
- **UX (2.1.2):** Misconception explainers now show inline LTL operators and formulas in the learner's selected Classic, Forge, or Electrum syntax, updating immediately when the top-bar syntax choice changes. Explainer fragments are authored in Classic inside `<code class="ltlformula">` and rewritten client-side by token substitution — safe because the tutor grammar only permits lowercase atoms, so a bare `X`/`F`/`G`/`U` is always an operator.
- **Bugfix (2.1.2):** The precedence explainer claimed `a | b & c -> d` parses as `((a | b) & c) -> d`; the parser actually yields `(a | (b & c)) -> d` (binary operators bind `&` > `|` > `U` > `->` > `<->`, left-associative within a level). Separately, the Electrum rendering of `U` formulas rendered operands with the Forge renderer, so e.g. `(X p) U q` displayed `NEXT_STATE` where Electrum uses `AFTER`.
- **Experiment (2.1.1):** The english-to-LTL framing experiment now has three arms (one third each) instead of the 50/50 abstract/lights split: abstract, lights (concrete but *descriptive*), and a new deontic arm that frames the *same* formula as a document-access policy the student audits ("You are auditing access to a confidential document. Company policy: Whenever the document is open, the VPN must be connected."). Per the Wason selection-task literature, facilitation comes from deontic, violation-checkable rules rather than concrete content alone — so the lights arm becomes the mere-content control. The audit theme's four attributes (document open, clearance active, VPN connected, screen shared) are deliberately independent in a student's mental model: coupled only by the policy under test, never by physics, so every state assignment stays conceivable. Deontic phrasing places the obligation on consequents only ("is connected" → "must be connected"); triggers stay indicative. New responses log `translation_mode="contextualizeddeontic"`; the lights arm keeps its historical `"contextualized"` value and its exact wording, so earlier responses stay comparable.
Expand Down
3 changes: 3 additions & 0 deletions src/templates/exercise.html
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,9 @@ <h5 id="{{ qindex }}question_text" class="card-title mb-2">
<button type="button" class="btn btn-link text-primary p-0" data-toggle="modal" data-target="#ltlToEngRaterModal-{{ qindex }}">
Is this English sentence confusing or unclear?
</button>
<p id="unclear-ack-{{ qindex }}" class="w-100 text-muted mb-0 mt-1 d-none" role="status">
<small>Thank you for your feedback. Please answer with your best-guess interpretation of the sentence.</small>
</p>
{% include 'ltltoengrater.html' %}
{% endif %}
</div>
Expand Down
7 changes: 5 additions & 2 deletions src/templates/ltltoengrater.html
Original file line number Diff line number Diff line change
Expand Up @@ -127,10 +127,13 @@ <h5 class="modal-title" id="ltlToEngRaterModalLabel-{{ qindex }}">What issues di
});

if (response.ok) {
// Hide the modal on success
$(`#ltlToEngRaterModal-${qindex}`).modal('hide');
const ack = document.getElementById(`unclear-ack-${qindex}`);
if (ack) {
ack.classList.remove('d-none');
}
} else {
console.log('Failed to submit feedback. Please try again.');
alert('Failed to submit feedback. Please try again.');
}
} catch (error) {
console.error('Error submitting feedback:', error);
Expand Down
2 changes: 1 addition & 1 deletion src/templates/version.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.1.2
2.1.3
Loading