Files
fusion/scripts/lib/fnxc-future-dates-baseline.json
gsxdsm e56116d8e9 chore(fnxc): retire the stale scheduler allowance left by the rollover re-record (#3283)
**The date gate passes on `main` — but not because this was fixed.**

## What actually happened

UTC rolled over to `2026-08-01`. The gate compares against the later of
local and UTC, so two `2026-08-01` stamps in `scheduler.ts` became valid
on their own. That is the ratchet's normal drop path and is fine.

`#3278` then re-recorded the baseline "after the UTC rollover", which
set `scheduler.ts` to **allow 1** — exactly enough to absorb the one
stamp that did *not* age out:

```
FNXC:ConcurrencyAdmission 2026-08-06-09:00     ← six days out, wrong on any calendar
```

So the gate reports `123 known future-dated stamp(s), none added` and
exits 0, with a stamp inside it that will not be valid until next week.

## Why this is the failure the gate exists to catch

A blanket re-record cannot distinguish **aged out** from **still
wrong**, so it launders the second past the first. The sibling ratchet
states the rule outright:

> Do NOT re-record the baseline to clear this — that is the same false
green one layer up.

This is that, one layer up again: not a guard cleared by a baseline, but
a *baseline refresh* clearing a guard as a side effect.

## The fix

- stamp repointed to `2026-08-01` — today in UTC, which is the calendar
the gate actually compares against
- **allowance removed**, not left at 1, so the entry cannot be regrown
into

**Mutation-verified**: with the allowance gone, restoring `2026-08-06`
exits **1**. Before this change the same stamp exited **0**. That is the
whole point — the ratchet can now see it.

## One thing worth carrying forward

A six-days-out stamp is not a timezone slip. Neither the old `date -u`
guidance nor the current local-date guidance in AGENTS.md would have
prevented it, and CI-only checking cannot catch it before merge. This is
the concrete case for running the date check at author time, which I
have flagged but not landed since it changes the gate's contract.

## Verification

- `check-fnxc-future-dates` — exit 0, allowance removed
- `scheduler` suites — **148 pass**
- `tsc --noEmit` (engine) — 0 errors

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 17:41:47 -07:00

66 lines
3.7 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__/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/live-agent-count.ts": 1,
"packages/core/src/postgres/migrations/0000_initial.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/settings-schema.ts": 2,
"packages/core/src/store.ts": 1,
"packages/core/src/task-store/branch-group-ops.ts": 1,
"packages/core/src/task-store/merge-queue-ops-2.ts": 3,
"packages/core/src/task-store/task-artifacts-ops.ts": 5,
"packages/core/src/task-store/task-store-helpers.ts": 2,
"packages/core/src/task-store/update-task-deps.ts": 5,
"packages/dashboard/app/App.tsx": 2,
"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/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": 2,
"packages/dashboard/src/routes/register-task-workflow-routes.ts": 4,
"packages/dashboard/vitest.config.ts": 1,
"packages/engine/src/__tests__/executor-graph-failure-lanes-resolved.test.ts": 1,
"packages/engine/src/__tests__/executor-stale-spec-active-lanes.test.ts": 1,
"packages/engine/src/__tests__/planning-continuation-terminal-lanes.test.ts": 1,
"packages/engine/src/__tests__/workflow-planning-continuation-terminal-gap-live-e2e.pg.test.ts": 1,
"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/pi.ts": 3,
"packages/engine/src/project-engine.ts": 2,
"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/triage.ts": 5,
"docs/dashboard-guide.md": 2,
"docs/workflow-steps.md": 1
}