diff --git a/.changeset/fn-9095-spec-alignment-position.md b/.changeset/fn-9095-spec-alignment-position.md
new file mode 100644
index 0000000000..67fe15da1b
--- /dev/null
+++ b/.changeset/fn-9095-spec-alignment-position.md
@@ -0,0 +1,7 @@
+---
+"@runfusion/fusion": patch
+---
+
+summary: Show Task Detail plan content before low-frequency spec alignment provenance.
+category: fix
+dev: Moves the shared Definition-tab spec-lock report after task relationship sections.
diff --git a/docs/dashboard-guide.md b/docs/dashboard-guide.md
index a2c872740a..4f8203e9db 100644
--- a/docs/dashboard-guide.md
+++ b/docs/dashboard-guide.md
@@ -2439,7 +2439,7 @@ In **Settings → Merge**, pull-request mode offers **Required pull-request chec
Activity includes durable and ephemeral agent sessions from heartbeat, executor, workflow-step, triage, reviewer, and merger lanes. **Sessions** is the sum of CLI session rows and `usage_events` session-start rows in the `agent-session` category; each session class has one writer. Human chat and mailbox turns supply `user_message` events. Active nodes remains zero on a single-node installation when no mesh routing node id exists.
## Plan alignment in Task Detail
-The shared Task Detail Definition view shows the persisted spec alignment, latest lock/current-plan versions, and deterministic finding categories. `activeLock` is derived from the live approval fingerprint and current-plan hash; an unavailable or inactive lock is not presented as on-plan. A historical report from a prior lock or plan revision stays in retained history and displays as unavailable until a matching current report exists. Findings are structural; `mission-statement` identifies a changed Mission narrative hash without displaying or judging its prose. The same shared content is used by modal and right-dock task detail hosts.
+The shared Task Detail Definition view shows the persisted spec alignment, latest lock/current-plan versions, and deterministic finding categories at the bottom, below plan content and task-relationship sections. `activeLock` is derived from the live approval fingerprint and current-plan hash; an unavailable or inactive lock is not presented as on-plan. A historical report from a prior lock or plan revision stays in retained history and displays as unavailable until a matching current report exists. Findings are structural; `mission-statement` identifies a changed Mission narrative hash without displaying or judging its prose. The same shared content is used by modal and right-dock task detail hosts.
### Promote release-gate enrichment
diff --git a/packages/dashboard/app/components/TaskDetailModal.tsx b/packages/dashboard/app/components/TaskDetailModal.tsx
index 13eca4d8b7..b16fdd1074 100644
--- a/packages/dashboard/app/components/TaskDetailModal.tsx
+++ b/packages/dashboard/app/components/TaskDetailModal.tsx
@@ -6183,49 +6183,6 @@ export function TaskDetailContent({
) : (
<>
{/* FNXC:TaskDetailSummaryTab 2026-07-29-00:00: FN-8197 keeps Definition focused on plan, retry, and source metadata; completed merge metadata renders exclusively in the done-only Summary tab. */}
- {specLock && (
-
- Accepted {specLock.latestLock.acceptedAt} · plan hash {specLock.latestLock.currentPlanHash} · approval {specLock.latestLock.approvalFingerprint}
-
- Captured {specLock.currentPlan.capturedAt} · source revision {specLock.currentPlan.sourceRevision} · source hash {specLock.currentPlan.sourceHash}
- Re-lock changed: {specLock.latestLock.diff.changedSections.join(", ")}
- Retained history: {specLock.history.locks.map((lock) => `lock v${lock.version}`).join(", ") || "no locks"}; {specLock.history.currentPlans.map((plan) => `plan v${plan.version}`).join(", ") || "no plan evidence"}; {specLock.history.reports.length} reports
-
-
- {specLock.latestLock && (
-
- {specLock.report.findings.map((finding, index) => (
-
- ) : null}
-
+ Accepted {specLock.latestLock.acceptedAt} · plan hash {specLock.latestLock.currentPlanHash} · approval {specLock.latestLock.approvalFingerprint} +
+ )} + {specLock.currentPlan && ( ++ Captured {specLock.currentPlan.capturedAt} · source revision {specLock.currentPlan.sourceRevision} · source hash {specLock.currentPlan.sourceHash} +
+ )} + {specLock.latestLock?.diff?.changedSections.length ? ( +Re-lock changed: {specLock.latestLock.diff.changedSections.join(", ")}
+ ) : null} + {(specLock.history?.locks.length ?? 0) > 1 || (specLock.history?.currentPlans.length ?? 0) > 1 || (specLock.history?.reports.length ?? 0) > 1 ? ( ++ Retained history: {specLock.history.locks.map((lock) => `lock v${lock.version}`).join(", ") || "no locks"}; {specLock.history.currentPlans.map((plan) => `plan v${plan.version}`).join(", ") || "no plan evidence"}; {specLock.history.reports.length} reports +
+ ) : null} + {specLock.report?.findings.length ? ( +