gsxdsm
e8ca86d5ee
FN-8705: prioritize review and execution slot admission
...
Prioritize lifecycle-critical work whenever project capacity becomes available.
- Rank admission candidates as review/merge, execution, then planning.
- Coordinate scheduler handoffs with project and host capacity reservations.
- Cover lane priority and document the updated operator behavior.
Files changed: .changeset/fn-8705-slot-priority.md | 7 ++
docs/architecture.md | 2 +-
docs/dashboard-guide.md | 2 +-
packages/engine/src/__tests__/concurrency.test.ts | 95 +++++++++++-----------
.../engine/src/__tests__/project-engine.test.ts | 4 +-
.../starved-refinement-x-triage-poll.test.ts | 11 ++-
.../__tests__/triage-refinement-routing.test.ts | 16 ++--
.../workflow-continuation-capacity.test.ts | 3 +-
packages/engine/src/concurrency.ts | 37 +++++++--
packages/engine/src/project-engine.ts | 10 ++-
packages/engine/src/runtimes/in-process-runtime.ts | 3 +-
packages/engine/src/scheduler.ts | 40 ++++-----
packages/engine/src/triage.ts | 7 +-
13 files changed, 133 insertions(+), 104 deletions(-)
Fusion-Task-Id: FN-8705
Fusion-Task-Lineage: ef66360b-e504-4e3f-b25e-b032a719d8c0
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 09:24:18 -07:00
gsxdsm
1aa1516023
FN-8692: harden mission validator assertion matching
...
Make validator assertion identity handling explicit and fail closed for ambiguous legacy responses.
- Include authoritative assertion IDs in validator prompts
- Recover only unique exact-count legacy results positionally
- Reject duplicate unknown and empty assertion IDs with regression coverage
- Document the assertion identity contract and add a patch changeset
Files changed:
.changeset/fn-8692-validator-assertion-ids.md | 7 +
docs/missions.md | 2 +-
.../src/__tests__/mission-execution-loop.test.ts | 142 ++++++++++++++++++++-
packages/engine/src/mission-execution-loop.ts | 70 ++++++++--
4 files changed, 204 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-8692
Fusion-Task-Lineage: 973c65e9-962f-472b-8d42-aef1de830d70
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 09:18:49 -07:00
gsxdsm
ac8ce148d5
FN-8691: suppress repeated task wedge notifications
...
Prevent resolved-and-rewedged tasks from flooding operator notification channels.
- Persist per-reason notification timestamps with a six-hour cooldown.
- Apply cooldown claims consistently in durable storage and in-memory fallback paths.
- Cover reason transitions, legacy state, invalid timestamps, and cooldown expiry.
Files changed:
.changeset/fn-8691-wedge-notification-cooldown.md | 7 ++
docs/architecture.md | 4 +-
.../postgres/store-wedge-resolution.pg.test.ts | 67 +++++++++++-
packages/core/src/index.ts | 1 +
packages/core/src/store.ts | 21 +++-
packages/core/src/task-store/task-mutation-ops.ts | 6 ++
packages/core/src/types.ts | 2 +
packages/core/src/types/task-core.ts | 15 +++
.../__tests__/task-wedge-notification.test.ts | 117 ++++++++++++++++++++-
.../src/notification/notification-service.ts | 30 +++++-
10 files changed, 261 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-8691
Fusion-Task-Lineage: b7460508-f9b0-488b-828c-a51e9477304d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 08:58:49 -07:00
gsxdsm
79d2a73a10
FN-8690: document Grok CLI provenance blocker
...
Document the unavailable Grok CLI source provenance and preserve the existing usage gate.
- Record provenance investigation results and the BLOCKED-NO-SOURCE hand-off
- Validate FN-8690 evidence sections and canonical verdicts
- Explain why the API-supplied percentage gate remains unchanged
Files changed:
docs/solutions/integration-issues/grok-cli-usage-data-source.md | 64 ++++++++++++++++++++++
packages/dashboard/src/__tests__/grok-usage-finding-doc.test.ts | 21 +++++++
packages/dashboard/src/usage.ts | 3 +
3 files changed, 88 insertions(+)
Fusion-Task-Id: FN-8690
Fusion-Task-Lineage: 4521063d-2a9a-4710-9609-35b7582a2f2d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 08:52:08 -07:00
gsxdsm
04c2bb4707
FN-8654: rotate credential instances after provider limits
...
Retry provider-limit failures with eligible credential instances before falling back to existing pauses and backoff.
- Add a runtime-shared credential rotator with cooldown, exhaustion, and audit handling.
- Wire credential rotation into executor and heartbeat retry lanes while preserving user pause controls.
- Document the behavior and cover rotation, recovery, and retry paths.
Files changed:
.changeset/fn-8654-credential-instance-rotation.md | 7 +
AGENTS.md | 1 +
docs/architecture.md | 2 +-
docs/settings-reference.md | 4 +
.../__tests__/credential-instance-rotation.test.ts | 88 +++++++++++
.../__tests__/credential-rotation-lanes.test.ts | 20 +++
.../__tests__/credential-rotation-recovery.test.ts | 19 +++
.../__tests__/credential-rotation-wiring.test.ts | 15 ++
.../__tests__/rate-limit-retry-rotation.test.ts | 50 ++++++
.../src/__tests__/usage-limit-detector.test.ts | 14 ++
packages/engine/src/agent-heartbeat.ts | 102 +++++++++++-
.../engine/src/credential-instance-rotation.ts | 175 +++++++++++++++++++++
packages/engine/src/executor.ts | 141 +++++++++++++++--
packages/engine/src/index.ts | 7 +
packages/engine/src/project-engine.ts | 5 +
packages/engine/src/rate-limit-retry.ts | 32 +++-
packages/engine/src/runtimes/in-process-runtime.ts | 29 +++-
packages/engine/src/usage-limit-detector.ts | 18 ++-
18 files changed, 699 insertions(+), 30 deletions(-)
Fusion-Task-Id: FN-8654
Fusion-Task-Lineage: 44d63441-270c-4949-8c34-47ec4c9992e4
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 08:20:29 -07:00
gsxdsm
006cc40454
FN-8685: add durable cross-process task deletion consumers
...
Deliver durable, replay-safe cross-process task deletion observation.
- Add PostgreSQL lifecycle consumer cursors, leases, acknowledgements, retention, and recovery.
- Start named consumers in dashboard, serve, and engine runtime paths.
- Preserve delete integration metadata while suppressing replayed GitHub and GitLab side effects.
- Cover outbox identity, observed delivery, fencing, and reconciliation behavior.
Files changed:
...fn-8685-cross-process-task-deleted-observers.md | 7 +
.../fn-8685-task-deleted-outbox-consumers.md | 7 +
docs/architecture.md | 8 +-
...tgres-cross-process-task-deleted-observation.md | 8 +-
docs/storage.md | 10 +-
packages/cli/src/commands/dashboard.ts | 9 +-
packages/cli/src/commands/serve.ts | 9 +-
packages/cli/src/project-context.ts | 9 +-
.../task-deleted-outbox-consumer.pg.test.ts | 157 ++++++++
...-deleted-observed-dispatch-side-effects.test.ts | 36 ++
.../task-lifecycle-consumer-identity.test.ts | 22 ++
packages/core/src/index.ts | 11 +
.../0041_fn_8685_task_lifecycle_consumers.sql | 88 +++++
packages/core/src/postgres/schema-applier.ts | 16 +-
packages/core/src/postgres/schema/project.ts | 45 +++
packages/core/src/postgres/startup-factory.ts | 4 +
packages/core/src/store.ts | 54 ++-
.../__tests__/lifecycle-outbox-writer.test.ts | 4 +-
.../core/src/task-store/archive-lifecycle-2.ts | 1 +
packages/core/src/task-store/lifecycle-ops.ts | 13 +-
packages/core/src/task-store/lifecycle-outbox.ts | 2 +
packages/core/src/task-store/project-store-ops.ts | 4 +-
.../src/task-store/task-deleted-outbox-consumer.ts | 333 +++++++++++++++++
.../task-store/task-lifecycle-consumer-identity.ts | 32 ++
.../task-store/task-lifecycle-consumer-registry.ts | 396 +++++++++++++++++++++
.../task-store/task-lifecycle-event-retention.ts | 104 ++++++
packages/core/src/task-store/task-mutation-ops.ts | 1 +
packages/dashboard/src/github-tracking-state.ts | 12 +-
packages/dashboard/src/gitlab-delete-close.ts | 3 +
packages/dashboard/src/gitlab-split-close.ts | 7 +-
packages/dashboard/src/project-store-resolver.ts | 9 +-
packages/engine/src/project-manager.ts | 4 +-
packages/engine/src/project-runtime.ts | 2 +-
packages/engine/src/runtimes/in-process-runtime.ts | 17 +-
packages/engine/src/self-healing.ts | 27 ++
35 files changed, 1439 insertions(+), 32 deletions(-)
Fusion-Task-Id: FN-8685
Fusion-Task-Lineage: 63eca9ac-d2af-44b0-ba79-388a950148d3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 06:09:04 -07:00
gsxdsm
4b306f10bd
FN-8689: document Grok CLI source provenance gap
...
Record the unrecoverable Grok CLI provenance chain and preserve the unmeterable usage state.
- Document installed asset identity, attempted provenance retrievals, and the static-blocked verdict.
- Clarify that the legacy billing request is not verified CLI /usage behavior.
- Add a regression test for the provenance finding and credential-safe documentation.
Files changed:
docs/solutions/integration-issues/grok-cli-usage-data-source.md | 172 +++++++++++----------
packages/dashboard/src/__tests__/grok-usage-finding-doc.test.ts | 45 ++++++
packages/dashboard/src/usage.ts | 8 +-
3 files changed, 143 insertions(+), 82 deletions(-)
Fusion-Task-Id: FN-8689
Fusion-Task-Lineage: 473fc008-2e08-47f6-8f53-152da5b2c31a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 04:41:50 -07:00
gsxdsm
8c9346ee94
FN-8684: persist task deletion events transactionally
...
Persist task-deletion lifecycle events through a transactional PostgreSQL outbox.
- Add the task lifecycle outbox schema, migration, and atomic writer.
- Route deletion notice persistence through the transaction and preserve non-blocking cleanup.
- Cover outbox behavior, schema installation, and caller attribution with tests.
Files changed:
.changeset/fn-8684-task-deleted-outbox-writer.md | 7 +
docs/architecture.md | 6 +
docs/storage.md | 6 +
.../src/__tests__/postgres/schema-applier.test.ts | 82 ++++++++-
.../task-delete-caller-attribution.test.ts | 12 +-
.../task-delete-nonblocking-cleanup.test.ts | 13 +-
.../core/src/__tests__/task-delete-notice.test.ts | 7 +-
.../0040_fn_8684_task_lifecycle_outbox.sql | 44 +++++
packages/core/src/postgres/schema-applier.ts | 15 +-
packages/core/src/postgres/schema/project.ts | 27 +++
.../__tests__/lifecycle-outbox-writer.test.ts | 201 +++++++++++++++++++++
.../core/src/task-store/archive-lifecycle-2.ts | 93 ++++++++--
packages/core/src/task-store/async-persistence.ts | 26 ++-
packages/core/src/task-store/lifecycle-outbox.ts | 46 +++++
14 files changed, 557 insertions(+), 28 deletions(-)
Fusion-Task-Id: FN-8684
Fusion-Task-Lineage: 1869d221-2d8a-48fb-b245-9cd1af56bda0
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 04:24:05 -07:00
gsxdsm
a7591853eb
FN-8688: document unverified Grok CLI usage source
...
Document the provenance gap that prevents deriving Grok CLI usage data safely.
- Record version-skewed source and sanitized billing-replay evidence
- Keep absent Grok usage fields authenticated but unmeterable pending source-backed confirmation
- Link the usage-provider rationale to the investigation record
Files changed:
.../grok-cli-usage-data-source.md | 93 ++++++++++++++++++++++
packages/dashboard/src/usage.ts | 4 +-
2 files changed, 95 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8688
Fusion-Task-Lineage: 5aafa505-968f-4f63-83db-35e623f84052
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 04:19:46 -07:00
gsxdsm
c978cdbacf
FN-8687: close imported GitLab issues on task deletion
...
Add GitLab close-on-delete behavior for imported source issues.
- Close linked GitLab issues by default while honoring leave and delete action semantics.
- Preserve split-close ownership, skip merge requests, and limit malformed tracking fallback to deletion.
- Document the lifecycle contract and add dashboard coverage.
Files changed:
.changeset/fn-8687-gitlab-close-on-delete.md | 7 ++
docs/gitlab-parity-inventory.md | 20 +++-
docs/settings-reference.md | 1 +
docs/task-management.md | 5 +-
.../src/__tests__/gitlab-delete-close.test.ts | 101 +++++++++++++++++++++
.../src/__tests__/gitlab-lifecycle.test.ts | 35 +++++++
.../gitlab-parity-inventory-documentation.test.ts | 7 +-
.../__tests__/gitlab-source-issue-close.test.ts | 8 ++
.../src/__tests__/gitlab-split-close.test.ts | 12 +++
packages/dashboard/src/gitlab-delete-close.ts | 90 ++++++++++++++++++
packages/dashboard/src/gitlab-lifecycle.ts | 33 +++++--
packages/dashboard/src/gitlab-split-close.ts | 2 +-
packages/dashboard/src/index.ts | 1 +
.../dashboard/src/routes/register-git-github.ts | 7 ++
14 files changed, 313 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-8687
Fusion-Task-Lineage: 48bc9159-fc35-43cb-b72e-1b6260d9e3cb
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 04:08:57 -07:00
gsxdsm
0e8f6769ba
FN-8666: add credential instance pickers
...
Add credential-instance selection across dashboard model configuration surfaces.
- Expose provider credential instances in custom model dropdowns and task, workflow, and settings forms.
- Persist per-role credential-instance overrides through dashboard APIs and effective model resolution.
- Document credential-instance precedence and cover dropdown/settings behavior, including task state synchronization.
Files changed:
.changeset/fn-8666-credential-instance-picker.md | 7 ++
docs/settings-reference.md | 2 +
docs/workflow-steps.md | 2 +-
packages/dashboard/app/api.ts | 1 +
packages/dashboard/app/api/models-usage.ts | 27 ++++-
packages/dashboard/app/api/tasks.ts | 8 ++
.../app/components/CustomModelDropdown.css | 12 ++-
.../app/components/CustomModelDropdown.tsx | 71 ++++++++++++-
.../dashboard/app/components/InlineCreateCard.tsx | 23 +++-
packages/dashboard/app/components/ListView.tsx | 29 +++++-
.../app/components/ModelSelectionModal.tsx | 25 ++++-
.../dashboard/app/components/ModelSelectorTab.tsx | 29 +++++-
packages/dashboard/app/components/NewTaskModal.tsx | 23 +++-
.../dashboard/app/components/QuickEntryBox.tsx | 28 +++++
.../dashboard/app/components/SettingsModal.tsx | 2 +
.../dashboard/app/components/TaskDetailModal.tsx | 32 +++++-
packages/dashboard/app/components/TaskForm.tsx | 18 ++++
.../app/components/WorkflowNodeEditor.tsx | 13 ++-
.../app/components/WorkflowSettingsPanel.tsx | 38 ++++++-
...ustomModelDropdown.credential-instance.test.tsx | 111 ++++++++++++++++++++
.../__tests__/WorkflowSettingsPanel.test.tsx | 9 +-
.../app/components/effective-model-resolution.ts | 8 +-
.../settings/sections/GlobalModelsSection.tsx | 31 +++++-
.../settings/sections/ProjectModelsSection.tsx | 116 ++++++++++++++++-----
.../ProjectModelsSection.chatDefault.test.tsx | 33 +++++-
packages/dashboard/app/hooks/useFavorites.ts | 6 +-
packages/dashboard/app/hooks/useModelsCache.ts | 5 +-
.../src/routes/register-task-workflow-routes.ts | 17 ++-
28 files changed, 655 insertions(+), 71 deletions(-)
Fusion-Task-Id: FN-8666
Fusion-Task-Lineage: 6c3711b3-68b8-47a0-ac36-4b64846adf39
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 04:03:26 -07:00
gsxdsm
4f09758dc8
FN-8681: retarget executor step credential instances
...
Enable executor step sessions to use selected and rotated credential instances.
- Pass task-selected credential instances into step-session execution.
- Re-resolve live credential targets after usage-limit retries using the effective agent runtime configuration.
- Retarget future sessions safely and cover retry behavior.
- Document the runtime behavior and add a patch changeset.
Files changed:
.changeset/fn-8681-credential-instance-retarget.md | 7 +
docs/settings-reference.md | 7 +-
.../src/__tests__/step-session-executor.test.ts | 211 +++++++++++++++++++++
packages/engine/src/executor.ts | 21 ++
packages/engine/src/step-session-executor.ts | 94 ++++++++-
5 files changed, 332 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-8681
Fusion-Task-Lineage: 99724283-6f5d-4890-b7f8-65af1d88b12c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 03:45:59 -07:00
gsxdsm
4009eb34cb
FN-8683: remove unreachable SQLite task polling replica
...
Document PostgreSQL task-deletion observation and remove the obsolete SQLite polling path.
- Remove polling state, replica emissions, and activity-log suppression from TaskStore.
- Retain backend-aware cache warming while documenting the transactional-outbox follow-up.
- Add tombstone and soft-delete abort coverage across core and engine lanes.
Files changed:
docs/architecture.md | 3 +-
...tgres-cross-process-task-deleted-observation.md | 128 ++++++++++++++++
docs/storage.md | 3 +-
.../task-delete-nonblocking-cleanup.test.ts | 54 +++++++
.../task-deleted-polling-replica-tombstone.test.ts | 57 +++++++
.../task-updated-lanes-emit-surfaces.test.ts | 26 ----
packages/core/src/store.ts | 13 +-
packages/core/src/task-store/lifecycle-ops.ts | 168 ++-------------------
packages/core/src/task-store/task-artifacts-ops.ts | 4 -
.../__tests__/executor-soft-delete-abort.test.ts | 15 ++
.../src/__tests__/triage-soft-delete-abort.test.ts | 14 ++
11 files changed, 284 insertions(+), 201 deletions(-)
Fusion-Task-Id: FN-8683
Fusion-Task-Lineage: a052db0c-b6fc-4b05-b6b2-f8217b56ded0
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 03:24:36 -07:00
gsxdsm
23c9992e7b
FN-8682: add GitLab split-close issue comments
...
GitLab source issues now receive an explanatory split handoff before closure.
- Add a GitLab split-close service that posts normalized child-task notes before closing source issues.
- Wire split-close handling across project stores while preserving merge-request and failure safeguards.
- Document GitLab lifecycle parity and cover split-close behavior with tests.
Files changed:
.changeset/fn-8682-gitlab-split-close-comment.md | 7 ++
docs/gitlab-parity-inventory.md | 2 +-
docs/task-management.md | 1 +
.../gitlab-parity-inventory-documentation.test.ts | 2 +
.../src/__tests__/gitlab-split-close.test.ts | 113 +++++++++++++++++++++
packages/dashboard/src/gitlab-lifecycle.ts | 6 +-
packages/dashboard/src/gitlab-split-close.ts | 98 ++++++++++++++++++
packages/dashboard/src/gitlab-tracking-state.ts | 6 +-
packages/dashboard/src/index.ts | 1 +
.../dashboard/src/routes/register-git-github.ts | 6 ++
10 files changed, 237 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-8682
Fusion-Task-Lineage: 8eca9888-b10a-4ea9-b9d3-fc09a39022ab
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 03:19:00 -07:00
gsxdsm
3793b576d8
FN-8673: comment on split source issue closures
...
Explain GitHub source-issue closures when imported work is split into subtasks.
- carry split closure context through task deletion and triage
- post one explanatory comment before closing source and tracking GitHub issues
- preserve exactly-one-comment behavior when close retries after transient failures
- document split closure behavior and cover source/tracking scenarios
Files changed:
.changeset/fn-8673-split-close-issue-comment.md | 7 ++
docs/settings-reference.md | 2 +-
docs/task-management.md | 1 +
.../task-delete-caller-attribution.test.ts | 32 +++++++
packages/core/src/index.ts | 2 +-
packages/core/src/store.ts | 10 +--
packages/core/src/task-delete-attribution.ts | 16 ++++
.../core/src/task-store/archive-lifecycle-2.ts | 14 ++--
packages/core/src/task-store/archive-lifecycle.ts | 6 +-
packages/core/src/types.ts | 13 +++
.../src/__tests__/github-tracking-state.test.ts | 98 +++++++++++++++++++++-
packages/dashboard/src/github-tracking-state.ts | 82 +++++++++++++++---
packages/engine/src/__tests__/triage.test.ts | 4 +
packages/engine/src/triage.ts | 10 +++
14 files changed, 268 insertions(+), 29 deletions(-)
Fusion-Task-Id: FN-8673
Fusion-Task-Lineage: 904c2445-64d9-47b9-b706-f64b23c4e3a6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 02:47:25 -07:00
gsxdsm
8a6949dd24
FN-8661: resolve selected credential instances for sessions
...
Resolve requested provider credential instances before creating agent sessions.
- Thread lane credential instance selections through planning, validation, execution, review, and merge sessions.
- Resolve selected instances into runtime credential stores while retaining provider-default fallback behavior.
- Preserve selected credentials for mission validation, executor retries, and spawned child agents.
Files changed:
.../fn-8661-credential-instance-resolution.md | 7 ++
AGENTS.md | 1 +
docs/architecture.md | 2 +-
docs/secrets.md | 2 +
docs/settings-reference.md | 1 +
.../dashboard/src/__tests__/routes-auth.test.ts | 80 +++++++++++++++++++
.../dashboard/src/routes/register-model-routes.ts | 78 +++++++++++++++++++
.../src/__tests__/agent-session-helpers.test.ts | 16 ++++
.../credential-instance-resolution.test.ts | 49 ++++++++++++
packages/engine/src/agent-heartbeat.ts | 1 +
packages/engine/src/agent-runtime.ts | 9 ++-
packages/engine/src/agent-session-helpers.ts | 67 +++++++++++-----
packages/engine/src/auth-storage.ts | 90 ++++++++++++++++++----
packages/engine/src/executor.ts | 29 ++++++-
packages/engine/src/merger-ai.ts | 2 +
packages/engine/src/merger.ts | 5 ++
packages/engine/src/mission-execution-loop.ts | 4 +-
packages/engine/src/pi.ts | 7 +-
packages/engine/src/pr-response-run-ops.ts | 1 +
packages/engine/src/reviewer.ts | 7 ++
packages/engine/src/triage.ts | 2 +
21 files changed, 420 insertions(+), 40 deletions(-)
Fusion-Task-Id: FN-8661
Fusion-Task-Lineage: 1e34a3ce-0857-4619-9746-ce0dc12dc2ba
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 02:05:03 -07:00
gsxdsm
bdcfcbbc52
FN-8658: cover task update producer delivery paths
...
Expand task update lane coverage across every direct and failure-isolated producer.
- Inventory direct and safe task:updated producer routes.
- Exercise warm and cold lane metadata through public producer operations.
- Cover lifecycle, workflow integrity, and completion update paths.
Files changed:
.../task-updated-lanes-emit-surfaces.test.ts | 308 +++++++++++++++++----
1 file changed, 256 insertions(+), 52 deletions(-)
Fusion-Task-Id: FN-8658
Fusion-Task-Lineage: 7d93593c-6f5a-4299-96f3-f4ee8f260e41
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 01:41:13 -07:00
gsxdsm
13f7266b67
FN-8670: reuse model runtime fixtures in engine tests
...
Share a warmed Pi model runtime across engine catalog tests.
- Add an isolated in-memory model registry fixture backed by a per-file shared runtime.
- Warm the runtime before catalog tests and verify custom-provider registry isolation.
- Document the required fixture pattern for real Pi SDK catalog tests.
Files changed:
docs/testing.md | 1 +
.../engine/src/__tests__/_model-runtime-fixture.ts | 40 ++++++++++++++++++++++
.../custom-providers-openai-completions.test.ts | 15 +++-----
.../custom-providers-openai-responses.test.ts | 15 +++-----
.../src/__tests__/provider-registration.test.ts | 33 ++++++++++++------
5 files changed, 73 insertions(+), 31 deletions(-)
Fusion-Task-Id: FN-8670
Fusion-Task-Lineage: 7410d114-1853-44cc-a09b-a997fbc7f119
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 01:34:43 -07:00
gsxdsm
5786c87eff
FN-8679: contain mobile Summary table overflow
...
Keep Summary token and cost tables horizontally scrollable within mobile task details.
- Constrain Summary flex ancestors so wide tables cannot widen the detail body
- Preserve real token/cost table rendering across populated and empty usage states
- Add a patch changeset for the mobile overflow fix
Files changed:
.changeset/fn-8679-mobile-token-scroll.md | 7 +++
.../dashboard/app/components/TaskDetailModal.css | 9 ++++
.../__tests__/TaskDetailModal.summary-tab.test.tsx | 60 +++++++++++++++++++++-
3 files changed, 75 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-8679
Fusion-Task-Lineage: 33562f89-053f-4681-b1b1-98aa2f2704a2
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 01:28:38 -07:00
gsxdsm
4c2369ed99
FN-8678: keep mailbox task links in dashboard
...
Keep valid dashboard task links from mailbox markdown in the current application surface.
- Route same-origin task deep links through the shared task-opening handler.
- Preserve normal links, modified-click behavior, and desktop/mobile task-detail surfaces.
- Cover markdown task navigation in content, modal, and mailbox-view tests.
- Add a patch changeset for the mailbox navigation fix.
Files changed:
.changeset/mailbox-task-links-stay-in-app.md | 7 ++
.../app/components/MailboxMessageContent.tsx | 106 +++++++++++++++++----
packages/dashboard/app/components/MailboxModal.tsx | 2 +
packages/dashboard/app/components/MailboxView.tsx | 2 +
.../__tests__/MailboxMessageContent.test.tsx | 81 +++++++++++++++-
.../app/components/__tests__/MailboxModal.test.tsx | 29 +++++-
.../app/components/__tests__/MailboxView.test.tsx | 27 +++++-
7 files changed, 233 insertions(+), 21 deletions(-)
Fusion-Task-Id: FN-8678
Fusion-Task-Lineage: c906f173-f78d-4b5a-a0ce-5294cfddcada
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 01:22:20 -07:00
gsxdsm
ebe514c3e4
FN-8677: propagate task update lanes before conversion
...
Propagate cache-warmed workflow lanes through task updates so synchronous engine consumers support renamed boards.
- Add task lane cache and attach resolved lanes to task:updated metadata.
- Update scheduler, triage, and notification consumers to use carried lanes with bridge-safe fallbacks.
- Cover lane propagation and renamed-lane event behavior with core and engine tests.
Files changed:
.changeset/fn-8677-manual-merge-hold-lanes.md | 7 ++
.changeset/task-updated-carries-lanes.md | 7 ++
...orkflow-ir-readers-always-return-the-default.md | 22 +++++
.../sync-workflow-ir-second-blocker.test.ts | 43 +++-----
.../core/src/__tests__/task-lane-cache.test.ts | 30 ++++++
.../task-updated-lanes-emit-surfaces.test.ts | 92 ++++++++++++++++++
.../__tests__/task-updated-lanes-payload.test.ts | 42 ++++++++
packages/core/src/index.ts | 1 +
packages/core/src/store.ts | 36 ++++++-
packages/core/src/task-lane-cache.ts | 63 ++++++++++++
.../core/src/task-store/archive-lifecycle-2.ts | 3 +
packages/core/src/task-store/moves.ts | 1 +
packages/core/src/task-store/task-artifacts-ops.ts | 1 +
packages/core/src/task-store/task-update.ts | 1 +
packages/core/src/task-store/update-task-deps.ts | 4 +-
.../core/src/task-store/workflow-definitions.ts | 71 +++++---------
.../__tests__/scheduler-task-updated-lanes.test.ts | 108 +++++++++++++++++++++
.../task-updated-lanes-bridge-compat.test.ts | 94 ++++++++++++++++++
...task-updated-lanes-engine-emit-surfaces.test.ts | 101 +++++++++++++++++++
.../src/__tests__/triage-pause-abort.test.ts | 22 +++++
.../src/__tests__/triage-planning-wake.test.ts | 25 +++++
.../notification-renamed-lifecycle-columns.test.ts | 84 +++++++++++++++-
.../__tests__/task-wedge-notification.test.ts | 19 ++++
.../src/notification/notification-service.ts | 56 ++++-------
packages/engine/src/scheduler.ts | 62 +++---------
packages/engine/src/triage.ts | 105 ++++++--------------
scripts/lib/inert-sync-lane-baseline.json | 5 +-
27 files changed, 858 insertions(+), 247 deletions(-)
Fusion-Task-Id: FN-8677
Fusion-Task-Lineage: d8fef9db-0f88-4dfd-9813-be25e10e3588
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 01:15:10 -07:00
gsxdsm
5f12044168
FN-8652: add multiple provider credential instances
...
Enable operators to create, select, and remove named credentials for each supported provider.
- Add provider-auth instance discovery and credential mutation endpoints.
- Add dashboard authentication controls, status handling, and instance coverage.
- Document instance behavior and add a release changeset.
Files changed:
.changeset/fn-8652-provider-credential-instances.md | 7 +
docs/secrets.md | 2 +
docs/settings-reference.md | 4 +
packages/dashboard/app/api.ts | 1 +
packages/dashboard/app/api/provider-status.ts | 94 +++++-
.../dashboard/app/components/SettingsModal.tsx | 138 ++++-----
.../AuthenticationSection.instances.test.tsx | 75 +++++
.../settings/sections/AuthenticationSection.css | 13 +
.../settings/sections/AuthenticationSection.tsx | 199 +++++++-----
.../dashboard/src/__tests__/routes-auth.test.ts | 27 +-
packages/dashboard/src/routes.ts | 12 +-
.../dashboard/src/routes/register-auth-routes.ts | 334 ++++++++++++++++++---
.../src/__tests__/provider-auth-instances.test.ts | 65 ++++
packages/engine/src/provider-auth.ts | 89 ++++++
14 files changed, 845 insertions(+), 215 deletions(-)
Fusion-Task-Id: FN-8652
Fusion-Task-Lineage: 39568d58-7f57-4d17-97cb-1837323b3a94
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 01:07:59 -07:00
gsxdsm
df56790c9b
FN-8676: fix Quick Add upward menu anchoring
...
Keep Quick Add portal menus attached to their triggers when they open upward.
- Position upward menus with bottom anchors rather than height-capped top offsets.
- Apply shared positioning to Quick Add pickers and the custom model dropdown.
- Add desktop and mobile regression coverage and a patch changeset.
Files changed:
.changeset/quick-add-upward-menu-anchor.md | 7 ++++
.../app/components/CustomModelDropdown.tsx | 18 ++++++--
.../dashboard/app/components/QuickEntryBox.tsx | 48 +++++++++++++++-------
.../__tests__/CustomModelDropdown.test.tsx | 40 +++++++++++++++---
.../components/__tests__/QuickEntryBox.test.tsx | 46 ++++++++++++++++++---
.../app/utils/__tests__/fixedMenuPosition.test.ts | 12 +++---
packages/dashboard/app/utils/fixedMenuPosition.ts | 22 ++++++----
7 files changed, 151 insertions(+), 42 deletions(-)
Fusion-Task-Id: FN-8676
Fusion-Task-Lineage: e48b4b2c-9675-42c6-8712-83cb4a0ca3d8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 01:00:57 -07:00
gsxdsm
1e83dcceec
chore(release): v0.74.0-beta.6
...
Version bump via changesets.
2026-08-01 00:55:04 -07:00
gsxdsm
b244ecd9a0
fix(dashboard): refine queued badge icon alignment
2026-08-01 00:46:42 -07:00
gsxdsm
1cfedbb7c5
fix(dashboard): shift queued icon spacing left
2026-08-01 00:42:11 -07:00
gsxdsm
22da0f2341
fix(dashboard): balance queued badge icon spacing
2026-08-01 00:39:12 -07:00
gsxdsm
9b82ff29e1
fix: enforce active capacity and clarify queued cards
...
Refresh canonical live-task claims at serialized scheduler, planning, and merge admission boundaries, including workflow-step leases and reservation handoffs. Back off capacity-denied merges safely across abort and restart lifecycles. Render queued planning cards in the header badge family with compact reason-specific icons.
2026-08-01 00:32:25 -07:00
gsxdsm
cced31208e
FN-8672: document observed suite-only flakes
...
Record first-sighting evidence for three suite-only flakes while preserving their substantial test coverage.
- Define the narrow first-sighting observed-register exception and second-sighting quarantine escalation.
- Add reproduction data for the core and engine PostgreSQL-adjacent flakes.
- Validate register metadata, paths, hierarchy segments, and escalation guidance.
Files changed:
AGENTS.md | 4 ++
.../suite-only-flakes-observed-register.md | 74 ++++++++++++++++++++++
docs/testing.md | 4 ++
scripts/__tests__/observed-flake-register.test.mjs | 61 ++++++++++++++++++
4 files changed, 143 insertions(+)
Fusion-Task-Id: FN-8672
Fusion-Task-Lineage: b52c74fb-aa7b-49e3-9f1d-a2c8c577f9c7
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 00:21:14 -07:00
gsxdsm
dd569395e8
FN-8671: isolate triage admission state in tests
...
Prevent leaked singleton admission state from affecting later triage polling tests.
- Add test-only coordinator reset and inspection seams for all admission categories.
- Stop tracked triage processors before clearing shared reservation and pre-held-slot state.
- Cover teardown behavior and document singleton-state isolation guidance.
Files changed:
docs/testing.md | 6 ++
packages/engine/src/__tests__/concurrency.test.ts | 56 ++++++++++++++++
packages/engine/src/__tests__/triage.test.ts | 82 ++++++++++++++++++++---
packages/engine/src/concurrency.ts | 30 +++++++++
4 files changed, 166 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-8671
Fusion-Task-Lineage: 41217db4-1fd6-45d6-a846-c57fc3c7052e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 00:14:32 -07:00
gsxdsm
3b680cce04
FN-8675: align task-card size badges
...
Align direct size chips with adjacent task-card header badges.
- Center size badges on the shared header row across desktop and responsive layouts.
- Add coverage for size badge alignment, dimensions, and responsive CSS rules.
- Add a patch changeset for the dashboard alignment fix.
Files changed:
.changeset/fn-8675-size-badge-alignment.md | 7 +++
packages/dashboard/app/components/TaskCard.css | 8 +++
.../__tests__/TaskCard.badge-height.test.tsx | 68 ++++++++++++++++++++++
.../__tests__/TaskCard.badge-wrap.test.tsx | 10 ++++
4 files changed, 93 insertions(+)
Fusion-Task-Id: FN-8675
Fusion-Task-Lineage: bf2eefb8-dbc2-40dd-a009-800f883146a8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 00:10:04 -07:00
gsxdsm
ec55889605
FN-8674: add plan approval banner actions
...
Place plan approval controls alongside the task approval message for faster operator action.
- Add approve and reject controls to the plan-approval banner.
- Reuse existing approval handlers and add coverage for banner and footer actions.
- Add responsive banner action styling and a patch changeset.
Files changed:
.changeset/plan-approval-banner-actions.md | 7 +++
.../dashboard/app/components/TaskDetailModal.css | 14 +++++
.../dashboard/app/components/TaskDetailModal.tsx | 19 ++++++-
.../TaskDetailModal.definition-actions.test.tsx | 59 +++++++++++++++++-----
4 files changed, 85 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-8674
Fusion-Task-Lineage: 89c521c2-535d-4492-8b39-6e1517693218
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-31 23:53:38 -07:00
gsxdsm
713e9320b0
fix(engine): enforce capacity for workflow continuations
...
Route durable planning and review continuations through shared project admission, retain reservations through execution, and prevent duplicate continuations from releasing another run's slot.
2026-07-31 23:33:47 -07:00
gsxdsm
7334cffebd
FN-8660: add credential instance selection persistence
...
Persist optional credential-instance selections across model configuration without changing runtime credential behavior.
- Add credential instance IDs to global, project, task, preset, and workflow IR model lanes.
- Preserve selected instance IDs through model resolution and task persistence.
- Add PostgreSQL migration coverage, unit tests, documentation, and a minor changeset.
Files changed:
.../fn-8660-credential-instance-selection.md | 7 ++
docs/settings-reference.md | 17 +++++
.../core/src/__tests__/model-resolution.test.ts | 37 ++++++++++
.../credential-instance-selection.pg.test.ts | 81 +++++++++++++++++++++
.../postgres/settings-persistence.pg.test.ts | 83 ++++++++++++++++++++++
.../src/__tests__/workflow-ir-settings.test.ts | 66 +++++++++++++++++
packages/core/src/builtin-workflow-settings.ts | 41 +++++++++++
packages/core/src/model-resolution.ts | 57 ++++++++++++++-
.../0039_fn_8660_credential_instance_selection.sql | 9 +++
packages/core/src/postgres/schema-applier.ts | 14 +++-
packages/core/src/postgres/schema/project.ts | 4 ++
packages/core/src/settings-schema.ts | 25 +++++++
packages/core/src/store.ts | 2 +-
.../core/src/task-store/archive-lifecycle-2.ts | 8 +++
.../core/src/task-store/branch-and-pr-entities.ts | 2 +-
packages/core/src/task-store/persistence.ts | 8 +++
packages/core/src/task-store/serialization.ts | 6 ++
packages/core/src/task-store/settings-ops.ts | 30 ++++++++
packages/core/src/task-store/task-creation.ts | 18 ++++-
packages/core/src/task-store/task-mutation-ops.ts | 6 +-
packages/core/src/task-store/task-row-mappers.ts | 6 +-
packages/core/src/task-store/task-update.ts | 24 +++++++
packages/core/src/types/archive-planning.ts | 5 ++
packages/core/src/types/settings-scope.ts | 40 +++++++++++
packages/core/src/types/task-core.ts | 30 ++++++++
packages/core/src/types/workflow-steps.ts | 9 +++
packages/core/src/workflow-ir.ts | 18 +++++
packages/core/src/workflow-settings.ts | 10 +++
28 files changed, 650 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-8660
Fusion-Task-Lineage: a3f625eb-018c-4084-954e-488b1d37691e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-31 23:08:51 -07:00
gsxdsm
f5a776d923
FN-8667: align fast-mode badges with task status
...
Keep fast-mode metadata badges in the task-card header's shared wrapping context.
- Make the meta badge wrapper layout-transparent so fast, priority, and oversight badges wrap independently with status.
- Prevent fast and priority chips from shrinking and update desktop and mobile layout coverage.
- Add a patch changeset for aligned task-card badges.
Files changed:
.changeset/task-card-fast-mode-badge-wrap.md | 7 ++++
packages/dashboard/app/components/TaskCard.css | 16 ++++----
.../__tests__/TaskCard.badge-wrap.test.tsx | 46 ++++++++++++++++++++++
.../app/components/__tests__/TaskCard.test.tsx | 6 +--
4 files changed, 64 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-8667
Fusion-Task-Lineage: 34bdb410-8d8a-4b1f-8bc4-105ae324874e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-31 22:51:07 -07:00
gsxdsm
ee77a8d3fa
FN-8659: preserve custom task specification sections
...
Preserve custom planning sections while reinjecting the original task description.
- Align unmarked original-description bodies before selecting a terminator.
- Anchor inserted descriptions before custom H2 sections and retain safe fallback behavior.
- Add regression coverage, workflow documentation, and a patch changeset.
Files changed:
...fn-8659-original-description-custom-sections.md | 7 ++
docs/workflow-steps.md | 2 +
.../__tests__/original-description-policy.test.ts | 114 ++++++++++++++++-
packages/core/src/original-description-policy.ts | 135 ++++++++++++++++++---
4 files changed, 235 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-8659
Fusion-Task-Lineage: 7f047a31-3750-4545-b743-bfac9546c55b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-31 22:38:52 -07:00
gsxdsm
5596d915ab
FN-8647: quarantine flaky Kimi K3 catalog test
...
Quarantine the timing-sensitive Kimi K3 SDK catalog test without changing timeout budgets.
- Reuse the native model registry once per test file.
- Add the observed CI timeout to the dashboard quarantine ledger and config.
- Document validation and timeout-budget preservation requirements.
Files changed:
docs/testing.md | 8 ++++++++
...ister-model-routes-kimi-k3-supplemental.test.ts | 23 ++++++++++++++++++++--
packages/dashboard/vitest.config.ts | 8 ++++++++
scripts/lib/test-quarantine.json | 5 +++++
4 files changed, 42 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8647
Fusion-Task-Lineage: 31e79677-d923-4003-a8e8-082159334e65
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-31 22:32:18 -07:00
gsxdsm
897cce9d94
FN-8656: resolve scheduler lanes for renamed holds
...
Resolve scheduler lane lookup against workflow-defined hold and terminal columns.
- Use asynchronous workflow lane resolution after the synchronous event prologue
- Preserve legacy lane fallback and recognize all terminal workflow columns
- Update scheduler regression coverage, sync-lane guardrails, and release notes
Files changed:
.changeset/fn-8656-scheduler-renamed-hold-lanes.md | 7 ++
.../sync-workflow-ir-callsite-allowlist.test.ts | 10 +-
.../scheduler-renamed-hold-events.test.ts | 20 ++--
...ow-scheduler-parked-columns-live-e2e.pg.test.ts | 13 ++-
...-sync-role-conversion-inert-live-e2e.pg.test.ts | 8 +-
packages/engine/src/scheduler.ts | 121 +++++++++------------
scripts/check-inert-sync-lane-conversions.mjs | 5 +
scripts/lib/inert-sync-lane-baseline.json | 3 +-
8 files changed, 92 insertions(+), 95 deletions(-)
Fusion-Task-Id: FN-8656
Fusion-Task-Lineage: 389a95a1-289f-4dde-86b3-1e450f8d43db
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-31 22:19:32 -07:00
gsxdsm
dcf1b921a3
fix(engine): close active-slot reservation handoff gaps
2026-07-31 22:10:14 -07:00
gsxdsm
012729cf2b
chore: tighten lifecycle-column census baseline after slot-accounting fix
...
The active-worktree slot-accounting fix removed two deliberate scheduler
literals (done/archived: 3 -> 2); re-record so the ratchet follows the count
down.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-31 22:07:50 -07:00
gsxdsm
5a19d1da6e
fix: count only actively running tasks against worktree capacity
...
Retained directories on queued, paused, blocked, or terminal tasks no longer
consume scheduler slots. Agent concurrency and worktree capacity now count the
same canonical live-task population through one project admission ceiling
(resolveActiveTaskCapacityLimit) with an atomic reserveIfAvailable claim, so
planning, execute, and merge lanes cannot each observe and claim the final
worktree slot independently.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-31 22:07:05 -07:00
gsxdsm
031d0f3e0b
FN-8665: align task-card size badge heights
...
Align size badges with the shared task-card badge geometry across responsive layouts.
- Remove fixed size-chip heights so shared badge styling determines dimensions.
- Cover desktop and wrapped badge geometry for S, M, and L task sizes.
- Add a patch changeset for the visual consistency fix.
Files changed:
.changeset/fn-8665-size-badge-height.md | 7 +++++
packages/dashboard/app/components/TaskCard.css | 14 +++------
.../__tests__/TaskCard.badge-height.test.tsx | 33 ++++++++++++++++++++--
.../__tests__/TaskCard.badge-wrap.test.tsx | 18 ++++++------
4 files changed, 50 insertions(+), 22 deletions(-)
Fusion-Task-Id: FN-8665
Fusion-Task-Lineage: e54e76d5-ba33-49d5-ac05-25c0cc4183db
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-31 22:03:15 -07:00
gsxdsm
182e3fdbe8
FN-8651: add named provider credential instances
...
Add provider-instance identity and auth.json storage for multiple credentials per provider.
- Export provider-instance key parsing, validation, and reserved metadata helpers.
- Resolve, list, mutate, and select named credential instances atomically in auth storage.
- Preserve legacy bare-key hydration and document the auth.json instance contract.
- Cover provider instance parsing, storage behavior, and concurrent writes.
Files changed:
.changeset/fn-8651-provider-instances.md | 7 +
docs/secrets.md | 8 +
.../src/__tests__/oauth-credential-interop.test.ts | 16 ++
packages/core/src/index.ts | 16 ++
packages/core/src/oauth-credential-interop.ts | 15 +-
packages/core/src/provider-instance.test.ts | 24 +++
packages/core/src/provider-instance.ts | 65 +++++++
.../src/__tests__/auth-storage-concurrency.test.ts | 13 ++
.../src/__tests__/auth-storage-instances.test.ts | 75 ++++++++
packages/engine/src/auth-storage.ts | 214 +++++++++++++--------
10 files changed, 367 insertions(+), 86 deletions(-)
Fusion-Task-Id: FN-8651
Fusion-Task-Lineage: cfabe496-60f9-4166-a09f-87ea2028cfd9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-31 21:56:30 -07:00
gsxdsm
e080bca464
fix: persist awaitingApprovalReason through updateTask
...
The field was defined in persistence and serialization, the executor's Plan
Review replan-cap park wrote it, the triage manual gate null-cleared it, and
the dashboard special-cases it (isReviewBudgetExhaustedApproval badge + detail
explanation) — but updateTask's field-by-field merge never applied the key, so
every writer silently dropped it. FN-8647's 15-cycle non-converging Plan Review
loop therefore parked with a generic 'needs approval' and no hint it was a cap
escalation.
Merge contract, pinned by tests with a measured revert proof (3/4 fail
pre-fix): set persists, explicit null clears, a status write that leaves
awaiting-approval without addressing the reason auto-clears it so an approved
or replanned card cannot carry a stale escalation reason into its next park,
and unrelated updates leave it untouched.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-31 21:42:24 -07:00
gsxdsm
744c01f7fb
FN-8657: extract move-target literal counter
...
Make the move-target literal ratchet directly testable without changing its scan behavior.
- Export the AST-based legacy destination counter for fixture testing
- Cover literal destinations, private moves, and deliberate exemptions
Files changed:
.../__tests__/check-move-target-literals.test.mjs | 30 ++++++++-
scripts/check-move-target-literals.mjs | 77 +++++++++-------------
2 files changed, 60 insertions(+), 47 deletions(-)
Fusion-Task-Id: FN-8657
Fusion-Task-Lineage: 5b1f9ac4-6026-4baf-b42c-f41ab0562679
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-31 21:34:25 -07:00
gsxdsm
44e607e1a7
refactor: rename tablet marker to floating-window--tablet-viewport, add shell naming maps
...
The right-padding bug recurred three times because 'Task Detail modal' names ONE
surface with THREE shells and fixes kept landing in the wrong file. Disambiguate:
- Rename the just-introduced .floating-window--tablet marker to
.floating-window--tablet-viewport and document the naming contract next to it:
--tablet-viewport = viewport MODE classifies tablet (touch or not, styling
surface); --touch-geometry = tablet AND touch (enlarged 44px targets only).
- Add SHELL NAMING MAP breadcrumbs at the top of TaskDetailModal.css and
TerminalModal.css pointing inset/padding fixes at the FloatingWindow shell
that tablet popups and floating terminals actually render through.
Comment wording deliberately avoids dot-prefixed class tokens because
FloatingWindow.test.tsx scans raw CSS (comments included) with selector regexes.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-31 21:25:40 -07:00
gsxdsm
a3c0501822
fix(engine): unblock retained worktree dispatch
...
Allow queued tasks to reuse worktrees they already hold when the durable worktree ledger is at or above capacity. Preserve independent agent and semaphore limits, and avoid releasing a worktree slot that a rejected transfer never acquired.
2026-07-31 21:21:28 -07:00
gsxdsm
71576d9536
fix: even out tablet popup right inset; drag terminal from whole toolbar
...
Third recurrence of the Task Detail right-padding bug (FN-8630/FN-8634): those
fixes only covered the .modal-overlay shells, while every tablet task popup and
floating terminal renders through FloatingWindow, whose shared body carries
FN-8015's margin-inline-end scrollbar gutter — a 16px right border with a 0px
left one. Tablet-mode windows (.floating-window--tablet, keyed on viewport MODE
so non-touch tablet widths match too) now zero the gutter; touch never grabs
scrollbar thumbs, so the desktop hot-zone conflict FN-8015 solves cannot occur.
GitHub-import's detail panel, which used the gutter as its right inset,
compensates locally. Desktop keeps the FN-8015 contract.
Also per operator request: the floating terminal is draggable from the empty
strip space behind the tabs and anywhere in the top toolbar, not only the
FN-8633 grip. Tab presses keep stopPropagation (scoped to .terminal-tab) so
they never start a window drag; the tablet floating header supersedes the
pan-x contract with touch-action: none (an overflowing strip is replaced by
the mobile-tabs dropdown, so no visible strip pans horizontally).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-31 20:54:48 -07:00
gsxdsm
b9612de748
FN-8646: fix dashboard task enrichment validation
...
Repair deterministic dashboard test regressions and reject whitespace-only enrichment targets.
- Normalize task IDs before enabling and submitting research enrichment.
- Update research, task-detail CSS, and chat visibility test fixtures.
- Add a patch changeset for the dashboard behavior fix.
Files changed:
.changeset/fn-8646-dashboard-test-repairs.md | 7 +++++++
.../app/components/ResearchTaskActionModal.tsx | 12 ++++++++++--
.../app/components/__tests__/ResearchView.test.tsx | 20 ++++++++++++++++----
.../components/__tests__/TaskDetailModal.css.test.ts | 11 +++++++++--
.../dashboard/app/hooks/__tests__/useChat.test.ts | 9 ++++++++-
5 files changed, 50 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-8646
Fusion-Task-Lineage: 033f4fa4-b096-4129-b82b-8fa7078dd6b2
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-31 20:39:37 -07:00
gsxdsm
7e4e892fce
fix(dashboard): one queued badge family — map raw 'queued', fold queued-to-plan into the status badge
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-31 20:33:34 -07:00