@deksden-com/dd-flow-cli 0.9.0-beta.112 → 0.9.0-beta.114

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @deksden-com/dd-flow-cli
2
2
 
3
+ ## 0.9.0-beta.114
4
+
5
+ ### Patch Changes
6
+
7
+ - Route controlled `merge apply` and `merge repair` hooks to the MERGE request's integration workspace, preserving native cwd validation across AGY, OpenCode, and Droid.
8
+
9
+ ## 0.9.0-beta.113
10
+
11
+ ### Patch Changes
12
+
13
+ - Allow sibling read-only reviewers to start concurrently when one updates the shared RUN projection; retain Work, generation, dependency, and immutable review-input checks.
14
+
3
15
  ## 0.9.0-beta.112
4
16
 
5
17
  ### Patch Changes
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "cli_package": "@deksden-com/dd-flow-cli",
3
- "cli_version": "0.9.0-beta.112",
4
- "cli_commit": "eeaf77a6f9dad6d16b993b0867b6098618556469",
5
- "built_at": "2026-09-27T13:52:13.633Z",
3
+ "cli_version": "0.9.0-beta.114",
4
+ "cli_commit": "b2fd68b574186d2202266ad9856455cc59ce7ed9",
5
+ "built_at": "2026-09-27T17:40:23.830Z",
6
6
  "built_with_canon": {
7
7
  "version": "4.1.1",
8
8
  "commit": "678daa038287c948ada5b2d785a6dcc925c7b891",
@@ -676,6 +676,12 @@ function controlledLifecycleCwd(context, projectRoot, facts, providerSessionId,
676
676
  const project = context.db.get("SELECT id FROM projects WHERE root = ?", [projectRoot]);
677
677
  if (!project)
678
678
  return projectRoot;
679
+ if (facts?.invocation.operation === "merge_apply" || facts?.invocation.operation === "merge_repair") {
680
+ const requestId = commandPosition(facts.invocation, 0);
681
+ const request = requestId && context.db.get("SELECT target_workspace FROM merge_requests WHERE project_id = ? AND merge_request_id = ?", [project.id, requestId]);
682
+ if (request)
683
+ return resolveProjectRoot(request.target_workspace);
684
+ }
679
685
  let work;
680
686
  if (facts?.workId) {
681
687
  try {
@@ -718,7 +724,7 @@ function controlledLifecycleCwd(context, projectRoot, facts, providerSessionId,
718
724
  }
719
725
  if (facts?.stageName === "specify" || facts?.stageName === "protocolize")
720
726
  return projectRoot;
721
- if (facts?.stageName === "merge") {
727
+ if (facts?.stageName === "merge" || facts?.invocation.operation === "merge_apply" || facts?.invocation.operation === "merge_repair") {
722
728
  const pending = context.db.all("SELECT target_workspace FROM merge_requests WHERE project_id = ? AND run_id = ? AND status IN ('dispatching','active','action_required') ORDER BY updated_at DESC", [project.id, run.id]);
723
729
  const targets = [...new Set(pending.map(item => resolveProjectRoot(item.target_workspace)))];
724
730
  if (targets.length > 1)
@@ -579,7 +579,6 @@ export function startBoundWork(context, work, run, claimIdentity, hookEventId, s
579
579
  const workerRun = readOnly && context.env.DD_FLOW_READ_ONLY_WORKSPACE
580
580
  ? { ...run, workspace_root: path.resolve(context.env.DD_FLOW_READ_ONLY_WORKSPACE) }
581
581
  : run;
582
- const indexBeforePrepare = context.db.get("SELECT index_json FROM runs WHERE project_id = ? AND id = ?", [work.project_id, work.run_id])?.index_json;
583
582
  const preparedReviewInput = readOnly ? assertSharedReviewInput(context, work, run, generation) : null;
584
583
  const reviewPaths = preparedReviewInput?.run_inputs.filter(item => item.root === "workspace").map(item => item.path) ?? [];
585
584
  const preparedCopy = readOnly && context.env.DD_FLOW_READ_ONLY_WORKSPACE ? prepareBoundReviewCopy(context, work, run, context.env.DD_FLOW_READ_ONLY_WORKSPACE, reviewPaths) : null;
@@ -601,8 +600,6 @@ export function startBoundWork(context, work, run, claimIdentity, hookEventId, s
601
600
  throw new AppError("conflict", "Work was claimed concurrently", 1, { work_id: current.work_id, status: current.status });
602
601
  if (Object.keys(current).some(key => current[key] !== work[key]))
603
602
  throw new AppError("work_not_ready", "Work inputs changed while preparing its start packet", 2, { work_id: current.work_id });
604
- if (context.db.get("SELECT index_json FROM runs WHERE project_id = ? AND id = ?", [work.project_id, work.run_id])?.index_json !== indexBeforePrepare)
605
- throw new AppError("work_not_ready", "RUN revision changed while preparing the Work start packet", 2, { work_id: current.work_id });
606
603
  if (!isReady(context, current))
607
604
  throw new AppError("work_not_ready", "Work dependencies are not ready", 2, { work_id: current.work_id, blockers: readinessBlockers(context, current) });
608
605
  if (retryPending)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deksden-com/dd-flow-cli",
3
- "version": "0.9.0-beta.112",
3
+ "version": "0.9.0-beta.114",
4
4
  "description": "Mechanical runtime CLI for dd-flow workflows.",
5
5
  "type": "module",
6
6
  "bin": {