Files
fusion/scripts/lib/fnxc-future-dates-baseline.json
gsxdsm 2a57820dd2 chore(gate): normalize the last future-dated stamp in task-update.ts (tightens the allowance 1 → 0) (#3168)
**Main is red on the FNXC gate again** — third occurrence of this class
today, third different file.

```
packages/core/src/task-store/task-update.ts: 2 future-dated FNXC stamp(s), baseline allows 1
```

Stamps dated **2026-08-01** while UTC is **2026-07-31-14:24**. Every
open PR inherits the failure; #3164 merged carrying it.

## The fix

Date only, to today. Clock times preserved exactly — they were real
times on the wrong day — and no comment text touched, so the record
reads identically, just in order:

```
-FNXC:StateMachine 2026-08-01-10:20 (PR #2793's finding — the INNER half, merged with #2821):
+FNXC:StateMachine 2026-07-31-10:20 (PR #2793's finding — the INNER half, merged with #2821):
```

Baseline **tightened** as a side effect (`1 → 0`): one future stamp was
grandfathered, normalizing the file cleared it too, and the gate refuses
a stale allowance on the way down. Re-recorded in the same commit.

## The recurrence is the point, not this fix

Three separate files have tripped this in one day — `scheduler.ts`, the
scheduler PG test, and now `task-update.ts` — plus the midnight-rollover
variant this morning that reddened everyone's baseline.

**Stamps are written from a local clock and validated against UTC.** A
worker behind UTC writes what is genuinely "today" for them and produces
a future stamp the moment UTC has already rolled. Nothing in the local
loop catches it: `pnpm lint` passes locally because the local date
agrees.

The durable fix is to generate the stamp from `date -u` rather than a
wall clock — one line in whatever produces these, and the class
disappears. I have patched the symptom three times today; someone should
take the cause. I have not done it myself because the stamps are
authored by hand across every worker's flow, so the change belongs
wherever that convention is documented, not in a file I happen to be
touching.

## Verification

`check-fnxc-future-dates` green (TZ=UTC CI=true) · `pnpm test:gate` 13 +
161 + 487 + 71 · lint · core typecheck clean · diff is date
substitutions only.
2026-07-31 07:56:09 -07:00

95 lines
5.4 KiB
JSON

{
"packages/cli/src/__tests__/cli-active-count-lanes.test.ts": 5,
"packages/cli/src/commands/dashboard.ts": 1,
"packages/cli/src/commands/task.ts": 6,
"packages/cli/src/extension.ts": 3,
"packages/core/src/__tests__/archive-all-done-lane.test.ts": 1,
"packages/core/src/__tests__/eval-automation-complete-lane.test.ts": 1,
"packages/core/src/__tests__/merge-path-lanes-resolved.test.ts": 2,
"packages/core/src/__tests__/postgres/dependency-satisfied-renamed-board.pg.test.ts": 2,
"packages/core/src/__tests__/postgres/task-dependency-mutation.pg.test.ts": 1,
"packages/core/src/__tests__/pure-lifecycle-predicates.test.ts": 3,
"packages/core/src/__tests__/unarchive-target-lanes.test.ts": 1,
"packages/core/src/async-chat-store.ts": 4,
"packages/core/src/async-mission-store-queries.ts": 1,
"packages/core/src/async-mission-store.ts": 1,
"packages/core/src/blocker-fanout.ts": 1,
"packages/core/src/chat-store.ts": 1,
"packages/core/src/command-center-live.ts": 1,
"packages/core/src/eval-automation.ts": 1,
"packages/core/src/index.gate.ts": 1,
"packages/core/src/live-agent-count.ts": 1,
"packages/core/src/mobile-nav-primary-items.ts": 1,
"packages/core/src/postgres/migrations/0000_initial.sql": 1,
"packages/core/src/postgres/migrations/0029_planning_active_timing.sql": 1,
"packages/core/src/postgres/migrations/0035_fn_8543_mission_lineage_stop.sql": 1,
"packages/core/src/postgres/migrations/0036_chat_session_tags.sql": 2,
"packages/core/src/project-lane-vocabulary.ts": 1,
"packages/core/src/settings-schema.ts": 2,
"packages/core/src/store.ts": 2,
"packages/core/src/task-store/archive-lifecycle-2.ts": 2,
"packages/core/src/task-store/branch-group-ops.ts": 1,
"packages/core/src/task-store/merge-queue-ops-2.ts": 4,
"packages/core/src/task-store/task-artifacts-ops.ts": 6,
"packages/core/src/task-store/task-store-helpers.ts": 2,
"packages/core/src/task-store/update-task-deps.ts": 5,
"packages/core/src/task-timing.ts": 1,
"packages/core/src/workflow-ir-resolver.ts": 2,
"packages/dashboard/app/App.tsx": 3,
"packages/dashboard/app/components/AgentDetailView.css": 1,
"packages/dashboard/app/components/ChatView.css": 2,
"packages/dashboard/app/components/PendingAttachmentPreviews.css": 1,
"packages/dashboard/app/components/TaskDetailModal.css": 1,
"packages/dashboard/app/utils/__tests__/appLifecycle.test.ts": 1,
"packages/dashboard/app/utils/appLifecycle.ts": 1,
"packages/dashboard/src/__tests__/ai-session-diagnostics.test.ts": 1,
"packages/dashboard/src/__tests__/board-workflows.test.ts": 1,
"packages/dashboard/src/__tests__/chat.test.ts": 1,
"packages/dashboard/src/__tests__/devserver-manager.test.ts": 1,
"packages/dashboard/src/__tests__/devserver-preview-detect.test.ts": 1,
"packages/dashboard/src/__tests__/github-tracking-renamed-board.test.ts": 3,
"packages/dashboard/src/__tests__/issue-image-attachments.test.ts": 1,
"packages/dashboard/src/__tests__/register-signal-routes.test.ts": 1,
"packages/dashboard/src/__tests__/routes-github.test.ts": 4,
"packages/dashboard/src/__tests__/routes-tasks.test.ts": 1,
"packages/dashboard/src/__tests__/sse.test.ts": 1,
"packages/dashboard/src/project-store-resolver.ts": 1,
"packages/dashboard/src/routes/__tests__/register-task-workflow-routes.move-bypassguards.test.ts": 2,
"packages/dashboard/src/routes/__tests__/register-task-workflow-routes.resolved-review-column.test.ts": 4,
"packages/dashboard/src/routes/register-task-workflow-routes.ts": 4,
"packages/dashboard/vitest.config.ts": 1,
"packages/engine/src/__tests__/census-query-role-split.test.ts": 1,
"packages/engine/src/__tests__/executor-graph-failure-lanes-resolved.test.ts": 7,
"packages/engine/src/__tests__/executor-resume-query-lanes.test.ts": 1,
"packages/engine/src/__tests__/executor-stale-spec-active-lanes.test.ts": 1,
"packages/engine/src/__tests__/heartbeat-terminal-lane.test.ts": 1,
"packages/engine/src/__tests__/lifecycle-column-census-ast.test.ts": 1,
"packages/engine/src/__tests__/lifecycle-column-census.test.ts": 1,
"packages/engine/src/__tests__/planning-continuation-terminal-lanes.test.ts": 1,
"packages/engine/src/__tests__/project-engine-merge-lane-resolved.test.ts": 2,
"packages/engine/src/__tests__/self-healing-db-corruption.test.ts": 1,
"packages/engine/src/__tests__/workflow-ir-provenance-live-e2e.pg.test.ts": 2,
"packages/engine/src/__tests__/workflow-planning-continuation-terminal-gap-live-e2e.pg.test.ts": 1,
"packages/engine/src/__tests__/workflow-timing-trait-live-e2e.pg.test.ts": 1,
"packages/engine/src/__tests__/workflow-unarchive-target-live-e2e.pg.test.ts": 1,
"packages/engine/src/agent-heartbeat.ts": 2,
"packages/engine/src/agent-session-helpers.ts": 2,
"packages/engine/src/agent-tools.ts": 1,
"packages/engine/src/concurrency.ts": 4,
"packages/engine/src/merger.ts": 2,
"packages/engine/src/mission-symbol-admission.ts": 1,
"packages/engine/src/pi.ts": 3,
"packages/engine/src/project-engine.ts": 8,
"packages/engine/src/restart-recovery-coordinator.ts": 1,
"packages/engine/src/runtime-resolution.ts": 1,
"packages/engine/src/runtimes/in-process-runtime.ts": 4,
"packages/engine/src/scheduler.ts": 3,
"packages/engine/src/triage.ts": 6,
"packages/engine/src/workflow-work-processor.ts": 1,
"scripts/lib/lifecycle-column-census-ast.mjs": 3,
"scripts/lifecycle-column-census.mjs": 3,
"docs/dashboard-guide.md": 3,
"docs/testing.md": 1,
"docs/workflow-steps.md": 1
}