diff --git a/components/EngagementForm.tsx b/components/EngagementForm.tsx
index b19e111..5f44493 100644
--- a/components/EngagementForm.tsx
+++ b/components/EngagementForm.tsx
@@ -19,6 +19,7 @@ function sectionForField(
import { evaluate } from "@/lib/conditional";
import { STAGE_OPTION_GROUP_ID } from "@/config/form";
import { StageSection } from "./StageSection";
+import { FieldRenderer } from "./fields/FieldRenderer";
import { loadDraft, saveDraft, clearDraft } from "@/lib/draft";
interface EngagementFormProps {
@@ -241,6 +242,26 @@ export function EngagementForm({ config, cid, cs }: EngagementFormProps) {
const currentRank = currentStageValue ? STAGE_RANK[currentStageValue] ?? 0 : 0;
+ // Section pathway state — past / current / future is determined entirely
+ // by stage rank vs the org's current rank. Sections never hide; future
+ // stages render in a locked treatment so users can preview what's ahead.
+ //
+ // Section-level visibleWhen is still consulted on submit to strip
+ // locked-stage values from the payload (see onSubmit below), so a future
+ // stage's data never gets accidentally written.
+ // The submitter-info section (rank: -1) lives outside the stage pathway —
+ // it renders directly above the section list (see JSX below), not inside
+ // the rail/marker accordion model used for Stage 0..5. Filter it out here
+ // so its rank doesn't pollute the past/current/future calculation.
+ const submitterSection = useMemo(
+ () => config.sections.find((s) => s.id === "submitter_info"),
+ [config.sections],
+ );
+ const stageSections = useMemo(
+ () => config.sections.filter((s) => s.id !== "submitter_info"),
+ [config.sections],
+ );
+
// Section pathway state — past / current / future is determined entirely
// by stage rank vs the org's current rank. Sections never hide; future
// stages render in a locked treatment so users can preview what's ahead.
@@ -250,12 +271,12 @@ export function EngagementForm({ config, cid, cs }: EngagementFormProps) {
// stage's data never gets accidentally written.
const sectionsToRender = useMemo(
() =>
- config.sections.map((s) => {
+ stageSections.map((s) => {
const pathwayState: PathwayState =
s.rank < currentRank ? "past" : s.rank === currentRank ? "current" : "future";
return { section: s, pathwayState, locked: pathwayState === "future" };
}),
- [config.sections, currentRank],
+ [stageSections, currentRank],
);
// Track which sections the user has manually opened/closed so we can
@@ -398,6 +419,38 @@ export function EngagementForm({ config, cid, cs }: EngagementFormProps) {
}} />
)}
+ {submitterSection && (
+ {submitterSection.intro}
+ {submitterSection.label}
+
+ {submitterSection.intro && (
+