diff --git a/frontend/dashboard.css b/frontend/dashboard.css
index bca02a6..c000ce3 100644
--- a/frontend/dashboard.css
+++ b/frontend/dashboard.css
@@ -488,6 +488,7 @@ textarea { resize: vertical; min-height: 120px; }
.issue-blocker-manager [role="option"] { text-align:left; overflow-wrap:anywhere; }
#manage-issue-blockers, #start-unblocked-issue { min-height:44px; width:100%; margin-top:10px; }
.today-readiness-blocker { width:100%; min-height:44px; text-align:left; background:#291b0c; }
+.issue-content-editor { max-width:100%; overflow-x:hidden; margin-top:16px; padding:12px; border:1px solid #2a496e; border-radius:12px; }
.issue-planning { max-width:100%; margin-top:16px; border:1px solid #2a496e; border-radius:12px; padding:0 12px 12px; overflow-x:hidden; }
.issue-planning > summary { min-height:44px; display:flex; align-items:center; cursor:pointer; font-weight:700; }
.issue-planning-retry { min-height:44px; width:100%; }
diff --git a/frontend/dashboard.js b/frontend/dashboard.js
index d0730b4..f4231a2 100644
--- a/frontend/dashboard.js
+++ b/frontend/dashboard.js
@@ -194,6 +194,7 @@
let issueBlockerSearchTimer = null;
let issueConversation = null;
let issueTrigger = null;
+ let issueEditHistoryActive = false;
let selectedPull = null;
let pullTrigger = null;
let selectedPullDetail = null;
@@ -3437,7 +3438,9 @@
qs('#issue-sheet-status').textContent = item.is_completed ?
'Completed Filed outcome ready · review the conversation' : readOnly ? 'Filed issue ready · follow-up enabled' :
'Issue ready · ' + (detail.state || 'open');
- qs('#edit-issue-content').disabled = false;
+ const revisableFiling = item.is_filed && !item.is_completed && detail.state === 'open';
+ qs('#edit-issue-content').textContent = revisableFiling ? 'Revise filing' : 'Edit issue';
+ qs('#edit-issue-content').disabled = readOnly && !revisableFiling;
const dueDraft = issueController.loadDueDateDraft(item);
qs('#issue-due-date').value = String(dueDraft || detail.due_date || '').slice(0, 10);
qs('#issue-due-date').disabled = false;
@@ -3462,6 +3465,10 @@
}
function closeIssueSheet(navigate = true) {
+ if (navigate && issueEditHistoryActive) {
+ history.back();
+ return;
+ }
if (navigate && createWorkRoute.parse(window.location.hash)) {
workRoute.close();
return;
@@ -3476,6 +3483,14 @@
if (issueTrigger?.isConnected) issueTrigger.focus();
}
+ function closeIssueEditorFromHistory() {
+ if (!issueEditHistoryActive) return;
+ issueEditHistoryActive = false;
+ qs('#issue-edit-form').hidden = true;
+ if (selectedIssue) qs('#edit-issue-content').focus();
+ }
+ window.addEventListener('popstate', closeIssueEditorFromHistory);
+
qs('#acknowledge-completed-filed').addEventListener('click', () => {
if (!selectedIssue?.is_completed) return;
if (!completedFiledReview.acknowledge(selectedIssue)) {
@@ -4958,6 +4973,10 @@
}
if (e.key === 'Escape' && selectedIssue) {
e.preventDefault();
+ if (!qs('#issue-edit-form').hidden) {
+ history.back();
+ return;
+ }
closeIssueSheet();
return;
}
@@ -5479,6 +5498,10 @@
qs('#issue-edit-title').value = draft.title;
qs('#issue-edit-body').value = draft.body;
qs('#issue-edit-form').hidden = false;
+ if (!issueEditHistoryActive) {
+ history.pushState({ ...history.state, stackchainIssueEdit:true }, '', window.location.href);
+ issueEditHistoryActive = true;
+ }
qs('#issue-edit-status').textContent = 'Edit the issue, then save.';
qs('#issue-edit-title').focus();
});
@@ -5493,8 +5516,11 @@
})
);
qs('#cancel-issue-content').addEventListener('click', () => {
- qs('#issue-edit-form').hidden = true;
- qs('#edit-issue-content').focus();
+ if (issueEditHistoryActive) history.back();
+ else {
+ qs('#issue-edit-form').hidden = true;
+ qs('#edit-issue-content').focus();
+ }
});
qs('#issue-edit-form').addEventListener('submit', async event => {
event.preventDefault();
@@ -5526,7 +5552,8 @@
qs('#issue-sheet-title').textContent = confirmed.title;
qs('#issue-sheet-body').innerHTML = renderMarkdown(confirmed.body || 'No description provided.');
paintMyWork(lastContextSnapshot);
- qs('#issue-edit-form').hidden = true;
+ if (issueEditHistoryActive) history.back();
+ else qs('#issue-edit-form').hidden = true;
qs('#issue-sheet-status').textContent = 'Issue saved.';
qs('#edit-issue-content').focus();
} catch (error) {
diff --git a/frontend/index.html b/frontend/index.html
index 7573e2c..7c4568b 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -645,9 +645,7 @@
-
- Plan & edit
-
+
+
+ Plan & edit
+