feat(FN-4108): persist scope override fields (+4 more)

Commits merged:
- test(FN-4073): finalize invariant regression coverage
- feat(FN-4073): complete Step 4 — document merge invariant
- feat(FN-4073): complete Step 3 — enforce squash file-scope invariant
- feat(FN-4073): complete Step 2 — add file-scope invariant helper
- feat(FN-4073): complete Step 1 — persist scope override fields

Files changed:
.changeset/FN-4073-file-scope-invariant.md         |   9 +
 AGENTS.md                                          |   6 +
 packages/core/src/__tests__/store-update.test.ts   |  18 ++
 packages/core/src/db.ts                            |   2 +
 packages/core/src/store.ts                         |  34 +-
 packages/core/src/types.ts                         |   8 +
 .../__tests__/merger-file-scope-invariant.test.ts  | 357 +++++++++++++++++++++
 .../engine/src/__tests__/merger-test-helpers.ts    |   5 +
 packages/engine/src/merger.ts                      | 155 ++++++++-
 9 files changed, 582 insertions(+), 12 deletions(-)

Fusion-Task-Id: FN-4108
This commit is contained in:
Fusion
2026-05-12 21:49:28 -07:00
committed by gsxdsm
parent ac59d5c71d
commit ad45a236fa
9 changed files with 582 additions and 12 deletions

View File

@@ -199,6 +199,24 @@ describe("TaskStore", () => {
});
describe("updateTask — scope override", () => {
it("persists scopeOverride and scopeOverrideReason via updateTask", async () => {
const task = await store.createTask({ title: "Scope override task", description: "A task" });
const updated = await store.updateTask(task.id, {
scopeOverride: true,
scopeOverrideReason: "hotfix",
});
expect(updated.scopeOverride).toBe(true);
expect(updated.scopeOverrideReason).toBe("hotfix");
const fetched = await store.getTask(task.id);
expect(fetched.scopeOverride).toBe(true);
expect(fetched.scopeOverrideReason).toBe("hotfix");
});
});
describe("updateTask — assigneeUserId", () => {
it("sets assigneeUserId via updateTask", async () => {
const task = await store.createTask({ title: "User task", description: "A task" });