Third and last of the three surfaces calling the blocker fan-out wrapper, completing the sweep started in #2990 (Board + Executor bar). ## What was wrong, precisely The dependent **list** is lane-independent — core pushes `dependentIds` without consulting lanes — so this section looked broadly right. Two things beside it are not: - `overlapBlockedTodoCount`, rendered as **"FN-X is blocking N todo task(s) via blockedBy overlap"** — counted against the literal `todo`, so on a renamed board it read **0 while cards were genuinely blocked**. - the `stale` marker on each blocking dependent — decided against `terminal`/`review` lanes the operator does not use. A wrong number sitting beside a right list is the easiest kind to miss, which is why I checked what the modal actually consumes before deciding this was worth a PR rather than assuming the whole section was broken. ## Why a prop and not a hook This was the surface I deferred in #2990 because it had no trait index in scope. Two options: - `useBoardWorkflows` inside the modal — rejected. The hook documents that it does **not** dedupe across consumers: each call installs its own visibilitychange/focus listeners and its own SSE subscription. That is a new fetch and subscription per modal open, to answer a question the app has already answered. - **Thread the index that already exists** — `App` builds `footerColumnFlagsByTaskId` for the footer; this forwards it through `AppModals` as an optional prop. Chosen. Optional throughout: a card with no entry keeps the documented legacy fallback, so the remote-node case (where local workflow metadata must never be applied to foreign ids) and the pre-load window stay byte-identical. ## Reverted The new case fails on the rendered text — the modal cannot find `"FN-B is blocking 2 todo task(s) via blockedBy overlap"`. The pre-existing legacy-column case above it passes either way, because `todo` satisfies the literal default; that is exactly why it never caught this. ## Verification TaskDetailModal.rendering + ExecutorStatusBar + useBlockerFanout **206 passed** · dashboard app suite 11986 passed / 5 skipped (581 files) · `pnpm test:gate` 161 + 13 + 487 + 71 · lint · census `--strict` · lane-wiring · fnxc-dates · changesets — green. ## One note for whoever owns the FNXC gate `check-fnxc-future-dates.mjs` **rewrites its baseline as a side effect and still exits 0**. Today's date roll dropped 183 stamps out of "future", so any run dirties `scripts/lib/fnxc-future-dates-baseline.json` in the working tree. It cost me a stash conflict before I noticed. Not bundled here — it is repo-wide midnight drift, not this change — but a check that mutates tracked state on a read is worth a look.
96 lines
5.5 KiB
JSON
96 lines
5.5 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/task-update.ts": 1,
|
|
"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
|
|
}
|