This note aligns sequencing across FN-3448, FN-3449, FN-3503, and FN-3182 using current contracts in docs and code.
Evidence highlights:
docs/shared-mesh-protocol.mddefinesstrongwrites, quorum/ack, fencing, and explicitly marks FN-3449 as part of the protocol implementation sequence (Section 14).packages/core/src/central-db.tsdefinesprojects(id, path UNIQUE, nodeId, settings)whereidis canonical registry identity andpathis a unique local filesystem location.packages/core/src/central-core.tsgeneratesRegisteredProject.id(proj_<uuid>), stores absolutepath, and treats node assignment viaassignProjectToNode()/unassignProjectFromNode()as separate from registration.docs/multi-project.mdalready distinguishes runtime placement (projects.nodeId) from task-routing defaults (defaultNodeId).packages/core/src/plugin-store.tspersists plugin rows in per-project.fusion/fusion.dbtoday (project-root-scoped store).- FN-3182 spec moves plugin install metadata to central DB with per-project state keyed by project path; FN-3503 introduces project-per-node path mappings to avoid assuming identical absolute paths on every node.
Current identity boundaries are not interchangeable:
RegisteredProject.id(central logical identity): stable registry key for cross-node/project orchestration.projects.path(local absolute path): host-local location; unique in one registry DB, but not portable identity across nodes.projects.nodeId(runtime placement): where a project runtime is hosted; not a task routing default and not a filesystem mapping key.- Project settings
defaultNodeId(task dispatch default): separate from runtime placement (docs/multi-project.md). - Plugin scope today is project-local (
PluginStore(rootDir)); FN-3182 proposes global install + project-scoped enablement, but its draft model still depends on path-based keys and therefore intersects FN-3503 identity work.
Implication: any multi-node plugin/project-state design that treats projects.path as cluster identity will conflict with FN-3503’s per-node path mapping direction.
Recommended board edges (hard vs alignment):
- Hard prerequisite:
FN-3448 -> FN-3449(already present; keep). - No dependency needed:
FN-3449does not needFN-3503orFN-3182to land its allocator contract. - Can proceed locally now, but needs follow-on alignment:
FN-3182can implement global install + per-project enablement for single-node/local multi-project flows now, but should preserve a migration seam for project identity keys once node-specific path mapping lands. - Recommended alignment edge:
FN-3503 -> FN-3182for full multi-node correctness, because FN-3503 supplies the missing canonical model for node-specific working directories that path-keyed plugin state otherwise bakes in.
Bridge-task recommendation (if board wants stricter decomposition):
- Create a follow-up bridge task after FN-3503 to migrate any path-keyed project-scoped plugin rows to
RegisteredProject.id(with node-aware resolution where needed), then have that bridge task feed final FN-3182 mesh-safe state semantics.
Comment recommendations to post:
- On FN-3449: keep only the existing hard dependency on FN-3448; do not add FN-3503/FN-3182 dependencies.
- On FN-3503: call out that this task is the identity substrate for any cross-node feature currently keying by local absolute path.
- On FN-3182: recommend adding dependency on FN-3503 for cluster-safe identity, or explicitly scope first landing to local/single-node semantics with planned follow-up migration.
- If FN-3182 lands full multi-node semantics before FN-3503, path-keyed per-project state can silently split/alias one logical project across nodes.
- If implementers conflate
projects.nodeIdwithdefaultNodeId, runtime placement and task dispatch behavior may diverge in production (docs/multi-project.mdexplicitly separates them). - If teams treat
projects.pathas a durable cross-node identity instead of location metadata, later migration to per-node mappings becomes a data-rewrite project instead of a bounded compatibility migration. - If FN-3449 is delayed behind unrelated identity tasks, mesh write-coordination rollout loses its first strongly coordinated write primitive even though its contract is already anchored by FN-3448.
Task references: FN-3448, FN-3449, FN-3503, FN-3182.