feat(FN-4982): merge fusion/fn-4982

This commit is contained in:
gsxdsm
2026-05-18 04:02:25 -07:00
parent f3300de379
commit 309e9a7c57

View File

@@ -88,7 +88,7 @@ Fusion automatically falls back to ntfy's JSON publish format when a notificatio
| `settingsSyncConflictResolution` | `"last-write-wins" \| "always-ask" \| "keep-local" \| "keep-remote"` | `"last-write-wins"` | Conflict strategy for divergent synced settings. |
| `secretsAccessPolicy` | `"auto" \| "prompt" \| "deny"` | `undefined` | Global default secret access policy used when a secret row does not set `access_policy`; resolver fallback remains `"prompt"`. |
| `secretsEnv` | `{ enabled?: boolean; filename?: string; overwritePolicy?: "skip" \| "merge" \| "replace"; keyPrefix?: string; requireGitignored?: boolean }` | `undefined` | Reserved secrets env-materialization settings block. Planned integration (FN-4867); currently not active in this branch. |
| `secretsSyncPassphraseConfigured` | `boolean` | `false` | Read-only probe indicating whether a shared cross-node secrets-sync passphrase has been provisioned in `secrets_global` (`~/.fusion/fusion-central.db`). The plaintext passphrase is never exposed via settings. See [Secrets](./secrets.md). |
| `secretsSyncPassphraseConfigured` | `boolean` | `false` | Read-only probe indicating whether the shared cross-node secrets-sync passphrase reserved secret (`__sync_passphrase__`) is provisioned in `secrets_global` (`~/.fusion/fusion-central.db`). The plaintext passphrase is never exposed via settings. See `packages/core/src/secrets-sync-passphrase.ts` and [Secrets](./secrets.md). |
| `owningNodeHandoffPolicy` | `"block" \| "reassign-to-local" \| "reassign-any-healthy"` | `"reassign-to-local"` | Global fallback policy for tasks whose owning checkout node is unavailable. Project-level `owningNodeHandoffPolicy` overrides this. |
| `dashboardCurrentNodeId` | `string` | `undefined` | Currently selected dashboard node ID. Restores the last-viewed node on fresh browser/PWA sessions. `undefined` means viewing the local node. |
@@ -195,7 +195,7 @@ Defaults from `DEFAULT_PROJECT_SETTINGS`; key scope from `PROJECT_SETTINGS_KEYS`
| `unavailableNodePolicy` | `"block" \| "fallback-local"` | `"block"` | Project routing policy used during scheduler dispatch when a task resolves to a remote node and node health is known. `"block"` keeps the task in `todo` if the node is unhealthy; `"fallback-local"` reroutes dispatch to local execution. See [Architecture → Task Routing Architecture](./architecture.md#task-routing-architecture). |
| `secretsAccessPolicy` | `"auto" \| "prompt" \| "deny"` | `undefined` | Project-level default secret access policy (overrides global default when present). |
| `secretsEnv` | `{ enabled?: boolean; filename?: string; overwritePolicy?: "skip" \| "merge" \| "replace"; keyPrefix?: string; requireGitignored?: boolean }` | `undefined` | Per-project secrets env-materialization settings block used by engine worktree acquisition/teardown (`.env` write + fingerprinted cleanup). |
| `secretsSyncPassphraseConfigured` | `boolean` | `false` | Read-only project-scope probe indicating whether a project-scoped secrets-sync passphrase row has been provisioned (when supported). The plaintext passphrase is never exposed via settings. |
| `secretsSyncPassphraseConfigured` | `boolean` | `false` | Read-only project-scope probe surface for secrets-sync passphrase configuration status. The shipped mechanism stores the shared passphrase in the reserved global secret `__sync_passphrase__` (via `getSyncPassphrase`/`setSyncPassphrase` in `packages/core/src/secrets-sync-passphrase.ts`), so plaintext passphrases are never exposed via settings. |
| `owningNodeHandoffPolicy` | `"block" \| "reassign-to-local" \| "reassign-any-healthy"` | `"reassign-to-local"` | Policy for tasks already checked out by an unavailable owning node. `"block"` parks, `"reassign-to-local"` takes over on local node, `"reassign-any-healthy"` makes takeover eligible on healthy peers. |
| `groupOverlappingFiles` | `boolean` | `true` | Serialize execution when file scopes overlap. |