@adhdev/daemon-standalone 0.9.82-rc.82 → 0.9.82-rc.83

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/dist/index.js CHANGED
@@ -22146,6 +22146,7 @@ var require_dist2 = __commonJS({
22146
22146
  requirePreTaskCheckpoint: false,
22147
22147
  requirePostTaskCheckpoint: true,
22148
22148
  requireApprovalForPush: true,
22149
+ allowAutoPublishSubmoduleMainCommits: false,
22149
22150
  requireApprovalForDestructiveGit: true,
22150
22151
  dirtyWorkspaceBehavior: "warn",
22151
22152
  maxParallelTasks: 2,
@@ -22908,6 +22909,7 @@ ${error48.message || ""}`;
22908
22909
  }
22909
22910
  const maxParallelTasks = Number(policy.maxParallelTasks);
22910
22911
  policy.maxParallelTasks = Number.isFinite(maxParallelTasks) ? Math.max(1, Math.min(8, Math.floor(maxParallelTasks))) : 2;
22912
+ policy.allowAutoPublishSubmoduleMainCommits = policy.allowAutoPublishSubmoduleMainCommits === true;
22911
22913
  if (!SESSION_CLEANUP_MODES.has(String(policy.sessionCleanupOnNodeRemove))) {
22912
22914
  policy.sessionCleanupOnNodeRemove = "preserve";
22913
22915
  }
@@ -23299,6 +23301,9 @@ ${userInstruction}`);
23299
23301
  if (policy.requirePreTaskCheckpoint) rules.push("- Create a git checkpoint **before** starting each task");
23300
23302
  if (policy.requirePostTaskCheckpoint) rules.push("- Create a git checkpoint **after** each task completes");
23301
23303
  if (policy.requireApprovalForPush) rules.push("- **Ask for user approval** before pushing to remote");
23304
+ if (policy.allowAutoPublishSubmoduleMainCommits) {
23305
+ rules.push("- Refinery may auto-publish unreachable submodule gitlink commits to submodule origin/main with non-force pushes after validation and patch-equivalence pass");
23306
+ }
23302
23307
  if (policy.requireApprovalForDestructiveGit) rules.push("- **Ask for user approval** before destructive git operations (force push, reset, etc.)");
23303
23308
  const dirtyBehavior = {
23304
23309
  block: "- **Do not** send tasks to nodes with dirty workspaces",
@@ -23330,7 +23335,7 @@ ${rules.join("\n")}`;
23330
23335
  - **Clean up worktree nodes.** After a worktree task completes and its changes are merged or checkpointed, call \`mesh_remove_node\` to free resources.
23331
23336
  - **Do not strand completed branches.** A checkpointed or clean feature/worktree branch is not done by itself. Merge/refine it to the mesh default branch, fast-forward obvious clean behind-only branches with \`mesh_fast_forward_node\`, or explicitly report one of \`pushed_feature_branch_needs_merge\`, \`blocked_review\`, \`cleanup_candidate\`, or \`not_mergeable\` with the next action.
23332
23337
  - **Keep Refinery validation project-configurable.** \`mesh_refine_node\` must execute validation from repo mesh/refine config (for example \`.adhdev/refine.{json,yaml,yml}\`, \`.adhdev/repo-mesh-refine.*\`, or \`repo-mesh.refine.*\`). Heuristics are suggestions/scaffolding only, not the execution path.
23333
- - **Treat submodule main reachability as publish-needed.** A \`submodule_reachability_failed\` refine result means the root gitlink points at a submodule commit that is not reachable from the configured submodule remote main branch. Do not treat feature-branch reachability as complete, retry validation blindly, or start code review first. Classify it as \`blocked_review\`, request user approval to push/publish the submodule commit to submodule main, then rerun \`mesh_refine_node\`.
23338
+ - **Treat submodule main reachability as publish-needed.** A \`submodule_reachability_failed\` refine result means the root gitlink points at a submodule commit that is not reachable from the configured submodule remote main branch. Do not treat feature-branch reachability as complete, retry validation blindly, or start code review first. Classify it as \`blocked_review\`, request user approval to push/publish the submodule commit to submodule main, then rerun \`mesh_refine_node\`, unless the mesh or repo refine config explicitly enabled \`allowAutoPublishSubmoduleMainCommits\` and Refinery reports exact path/commit/remote/branch evidence with post-publish verification.
23334
23339
  - **Name worktree branches meaningfully.** Use descriptive names like \`feat/auth-refactor\` or \`fix/build-123\`.${coordinatorNote}`;
23335
23340
  }
23336
23341
  var TOOLS_SECTION;
@@ -23379,7 +23384,7 @@ Before doing any coordinator work, confirm that the actual callable tool list in
23379
23384
  4. **Monitor** \u2014 Prefer event-driven completion/status notifications. Do **not** poll \`mesh_read_chat\` repeatedly. Use \`mesh_view_queue\` to see the status of all pending, assigned, completed, and failed tasks. Do not call \`mesh_read_chat\` again within a few seconds for the same generating session. Use at most one compact \`mesh_read_chat\` check after a completion/approval signal. Handle approvals via \`mesh_approve\`.
23380
23385
  5. **Verify** \u2014 When a task reports completion or git work is visible, call \`mesh_git_status\` to verify changes were made.
23381
23386
  6. **Checkpoint** \u2014 Call \`mesh_checkpoint\` to save the work.
23382
- 7. **Converge branches** \u2014 Before marking any task complete, classify every touched node/branch into exactly one final state: \`merged_to_main\`, \`pushed_feature_branch_needs_merge\`, \`blocked_review\`, \`cleanup_candidate\`, or \`not_mergeable\`. Use \`mesh_status\` branchConvergenceSummary. For obvious clean branch catch-up (ahead 0, behind > 0, upstream fresh, no dirty/stash/submodule issues), use \`mesh_fast_forward_node\` dry-run first and execute only when explicitly safe/approved; this avoids consuming an agent session. Use \`mesh_refine_node\` for clean worktree branches when safe. Before/refine merging root commits that contain submodule gitlink changes, require each submodule commit to be reachable from the configured submodule remote main branch, not merely present on a feature ref or local checkout. If \`mesh_refine_node\` returns \`submodule_reachability_failed\` or publish-required evidence, keep the public convergence bucket as \`blocked_review\`, ask the user for explicit approval to push/publish the unreachable submodule commit(s) to submodule main, then rerun \`mesh_refine_node\`; do not merge the root branch until the submodule commit(s) are reachable from submodule origin/main. A task that remains on a non-main branch is not fully complete unless the final report names the follow-up state and next step.
23387
+ 7. **Converge branches** \u2014 Before marking any task complete, classify every touched node/branch into exactly one final state: \`merged_to_main\`, \`pushed_feature_branch_needs_merge\`, \`blocked_review\`, \`cleanup_candidate\`, or \`not_mergeable\`. Use \`mesh_status\` branchConvergenceSummary. For obvious clean branch catch-up (ahead 0, behind > 0, upstream fresh, no dirty/stash/submodule issues), use \`mesh_fast_forward_node\` dry-run first and execute only when explicitly safe/approved; this avoids consuming an agent session. Use \`mesh_refine_node\` for clean worktree branches when safe. Before/refine merging root commits that contain submodule gitlink changes, require each submodule commit to be reachable from the configured submodule remote main branch, not merely present on a feature ref or local checkout. If \`mesh_refine_node\` returns \`submodule_reachability_failed\` or publish-required evidence, keep the public convergence bucket as \`blocked_review\`; unless \`allowAutoPublishSubmoduleMainCommits\` is explicitly enabled and Refinery reports successful non-force publish plus post-publish verification, ask the user for explicit approval to push/publish the unreachable submodule commit(s) to submodule main, then rerun \`mesh_refine_node\`. Do not merge the root branch until the submodule commit(s) are reachable from submodule origin/main. A task that remains on a non-main branch is not fully complete unless the final report names the follow-up state and next step.
23383
23388
  8. **Clean up** \u2014 Remove worktree nodes via \`mesh_remove_node\` after their work is merged or no longer needed.
23384
23389
  9. **Report** \u2014 Summarize what was done, what changed, any issues, and the branch convergence state.
23385
23390
 
@@ -25356,7 +25361,8 @@ Next step: ${nextStep}`;
25356
25361
  const providerSessionId = readNonEmptyString2(args.metadataEvent.providerSessionId) || void 0;
25357
25362
  const finalSummary = readNonEmptyString2(args.metadataEvent.finalSummary) || void 0;
25358
25363
  const workerResult = readWorkerResultMetadata(args.metadataEvent);
25359
- const completedTask = sessionId ? updateSessionTaskStatus(args.meshId, sessionId, "completed") : null;
25364
+ const hasCompletionEvidence = !!finalSummary || !!workerResult;
25365
+ const completedTask = sessionId && hasCompletionEvidence ? updateSessionTaskStatus(args.meshId, sessionId, "completed") : null;
25360
25366
  if (completedTask) {
25361
25367
  completedTaskForLedger = { id: completedTask.id };
25362
25368
  try {
@@ -30802,6 +30808,11 @@ ${lastSnapshot}`;
30802
30808
  required: ["version"],
30803
30809
  properties: {
30804
30810
  version: { const: 1 },
30811
+ allowAutoPublishSubmoduleMainCommits: {
30812
+ type: "boolean",
30813
+ default: false,
30814
+ description: "When true, Refinery may non-force publish submodule gitlink commits referenced by the refined root tree to each submodule origin/main after validation and patch-equivalence pass, then verify reachability."
30815
+ },
30805
30816
  validation: {
30806
30817
  type: "object",
30807
30818
  additionalProperties: false,
@@ -30894,6 +30905,9 @@ ${lastSnapshot}`;
30894
30905
  const rejectedCommands = [];
30895
30906
  if (!isRecord(config2)) return { valid: false, errors: ["config must be an object"], commands, rejectedCommands };
30896
30907
  if (config2.version !== 1) errors.push("version must be 1");
30908
+ if (config2.allowAutoPublishSubmoduleMainCommits !== void 0 && typeof config2.allowAutoPublishSubmoduleMainCommits !== "boolean") {
30909
+ errors.push("allowAutoPublishSubmoduleMainCommits must be a boolean when provided");
30910
+ }
30897
30911
  const validation = config2.validation;
30898
30912
  if (validation !== void 0 && !isRecord(validation)) errors.push("validation must be an object");
30899
30913
  const rawCommands = isRecord(validation) ? validation.commands : void 0;
@@ -38761,7 +38775,7 @@ ${effect.notification.body || ""}`.trim();
38761
38775
  returnedMessages,
38762
38776
  ptyStatusApprovalOnly: false
38763
38777
  });
38764
- if (supportsCliNativeTranscript(providerType)) {
38778
+ if (supportsCliNativeTranscript(providerType) && provider?.canonicalHistory?.mode === "native-source") {
38765
38779
  const agentStr = provider?.type || args?.agentType || getCurrentProviderType(h, adapter.cliType);
38766
38780
  const workspace = typeof args?.workspace === "string" ? args.workspace : typeof h.currentSession?.workspace === "string" ? h.currentSession.workspace : typeof adapter.workingDir === "string" ? adapter.workingDir : void 0;
38767
38781
  const nativeHistoryLimit = Math.max(
@@ -38920,6 +38934,17 @@ ${effect.notification.body || ""}`.trim();
38920
38934
  freshEnough: true,
38921
38935
  ptyStatusApprovalOnly: false
38922
38936
  });
38937
+ const requiresNativeSource = supportsCliNativeTranscript(agentStr) && provider?.canonicalHistory?.mode === "native-source";
38938
+ if (requiresNativeSource && !nativeSelected) {
38939
+ return {
38940
+ success: false,
38941
+ code: "native_history_not_safely_available",
38942
+ error: "Provider-native history was not safely available for the requested CLI session.",
38943
+ providerSessionId: historyProviderSessionId,
38944
+ messageSource,
38945
+ transcriptProvenance: messageSource
38946
+ };
38947
+ }
38923
38948
  return buildReadChatCommandResult({
38924
38949
  messages: historyMessages,
38925
38950
  status: "idle",
@@ -43788,6 +43813,14 @@ ${rawInput}` : rawInput;
43788
43813
  function countMessages(value) {
43789
43814
  return Array.isArray(value) ? value.length : 0;
43790
43815
  }
43816
+ function hasFinalAssistantMessage(value) {
43817
+ const messages = Array.isArray(value) ? value : [];
43818
+ const last = messages[messages.length - 1];
43819
+ if (!last || last.role !== "assistant") return false;
43820
+ if (last.bubbleState === "streaming") return false;
43821
+ if (last.meta?.streaming === true) return false;
43822
+ return typeof last.content === "string" && last.content.trim().length > 0;
43823
+ }
43791
43824
  function hasZeroMessageStartingLaunch(adapter) {
43792
43825
  const adapterStatus = adapter?.getStatus?.({ allowParse: false }) ?? adapter?.getStatus?.() ?? {};
43793
43826
  const parsedStatus = typeof adapter?.getScriptParsedStatus === "function" ? adapter.getScriptParsedStatus() : {};
@@ -43799,6 +43832,17 @@ ${rawInput}` : rawInput;
43799
43832
  if (countMessages(adapterStatus?.messages) > 0 || countMessages(parsedStatus?.messages) > 0) return false;
43800
43833
  return !hasAdapterPendingResponse(adapter);
43801
43834
  }
43835
+ function hasCompletedStartingLaunch(adapter) {
43836
+ const adapterStatus = adapter?.getStatus?.({ allowParse: false }) ?? adapter?.getStatus?.() ?? {};
43837
+ const adapterRawStatus = normalizeAgentStatus(adapterStatus?.status);
43838
+ if (adapterRawStatus !== "starting") return false;
43839
+ if (hasAdapterPendingResponse(adapter)) return false;
43840
+ const parsedStatus = typeof adapter?.getScriptParsedStatus === "function" ? adapter.getScriptParsedStatus() : {};
43841
+ const parsedRawStatus = normalizeAgentStatus(parsedStatus?.status);
43842
+ if (parsedRawStatus !== "idle") return false;
43843
+ if (hasNonEmptyModalButtons2(adapterStatus?.activeModal ?? adapterStatus?.modal ?? parsedStatus?.activeModal ?? parsedStatus?.modal)) return false;
43844
+ return hasFinalAssistantMessage(parsedStatus?.messages);
43845
+ }
43802
43846
  function shouldSuppressStaleParsedBusyStatus(adapterStatus, parsedStatus, adapter) {
43803
43847
  const parsedRawStatus = normalizeAgentStatus(parsedStatus?.status);
43804
43848
  if (!BUSY_AGENT_STATUSES.has(parsedRawStatus)) return false;
@@ -43808,6 +43852,7 @@ ${rawInput}` : rawInput;
43808
43852
  }
43809
43853
  function getEffectiveAgentSendStatus(adapter) {
43810
43854
  const adapterStatus = normalizeAgentStatus(adapter?.getStatus?.({ allowParse: false })?.status ?? adapter?.getStatus?.()?.status);
43855
+ if (adapterStatus === "starting" && hasCompletedStartingLaunch(adapter)) return "idle";
43811
43856
  if (adapterStatus && adapterStatus !== "idle") return adapterStatus;
43812
43857
  if (adapterStatus !== "idle") return adapterStatus;
43813
43858
  if (typeof adapter?.getScriptParsedStatus !== "function") return adapterStatus;
@@ -48758,6 +48803,16 @@ ${(0, import_node_path.resolve)(workspace || os17.tmpdir())}`;
48758
48803
  const refs = entries.map((entry) => `${entry.path}@${entry.commit}`).join(", ");
48759
48804
  return `Ask the user for explicit approval to push/publish the unreachable submodule commit(s) (${refs}) to the configured submodule remote main branch, then rerun mesh_refine_node. Do not merge the root branch until every submodule gitlink commit is reachable from submodule origin/main.`;
48760
48805
  }
48806
+ function resolveRefineryAutoPublishSubmoduleMainCommits(mesh, workspace) {
48807
+ if (mesh?.policy?.allowAutoPublishSubmoduleMainCommits === true) {
48808
+ return { enabled: true, source: "mesh.policy.allowAutoPublishSubmoduleMainCommits" };
48809
+ }
48810
+ const loaded = loadMeshRefineConfig(mesh, workspace);
48811
+ if (loaded.config?.allowAutoPublishSubmoduleMainCommits === true) {
48812
+ return { enabled: true, source: loaded.path || loaded.source };
48813
+ }
48814
+ return { enabled: false };
48815
+ }
48761
48816
  async function computeGitPatchId(cwd, fromRef, toRef) {
48762
48817
  const { execFileSync: execFileSync3 } = await import("child_process");
48763
48818
  const diff = execFileSync3("git", ["diff", "--patch", "--full-index", fromRef, toRef], {
@@ -48826,7 +48881,7 @@ ${(0, import_node_path.resolve)(workspace || os17.tmpdir())}`;
48826
48881
  };
48827
48882
  }
48828
48883
  }
48829
- async function runMeshRefineSubmoduleReachabilityGate(repoRoot, mergedTree) {
48884
+ async function runMeshRefineSubmoduleReachabilityGate(repoRoot, mergedTree, options = {}) {
48830
48885
  const startedAt = Date.now();
48831
48886
  const entries = [];
48832
48887
  try {
@@ -48847,6 +48902,17 @@ ${(0, import_node_path.resolve)(workspace || os17.tmpdir())}`;
48847
48902
  await runGit2(submodulePath, ["-c", "protocol.file.allow=always", "fetch", "origin", `refs/heads/${branch}:refs/remotes/origin/${branch}`]);
48848
48903
  await runGit2(submodulePath, ["merge-base", "--is-ancestor", commit, `refs/remotes/origin/${branch}`]);
48849
48904
  };
48905
+ const publishCommitToRemoteMain = async (submodulePath, commit, branch = "main") => {
48906
+ const refspec = `${commit}:refs/heads/${branch}`;
48907
+ const { stdout, stderr } = await execFileAsync3("git", ["push", "origin", refspec], {
48908
+ cwd: submodulePath,
48909
+ encoding: "utf8",
48910
+ timeout: 3e4,
48911
+ maxBuffer: REFINE_PATCH_EQUIVALENCE_OUTPUT_LIMIT_BYTES,
48912
+ windowsHide: true
48913
+ });
48914
+ return { stdout: String(stdout || ""), stderr: String(stderr || ""), refspec };
48915
+ };
48850
48916
  const treeOutput = await runGit2(repoRoot, ["ls-tree", "-r", "-z", mergedTree]);
48851
48917
  const gitlinks = treeOutput.split("\0").filter(Boolean).map((record2) => {
48852
48918
  const match = /^160000\s+commit\s+([0-9a-f]{40})\t(.+)$/.exec(record2);
@@ -48887,11 +48953,43 @@ ${(0, import_node_path.resolve)(workspace || os17.tmpdir())}`;
48887
48953
  continue;
48888
48954
  }
48889
48955
  entry.remoteMainBranch = "main";
48890
- await verifyRemoteMainContainsCommit(submodulePath, gitlink.commit, "main");
48891
- entry.fetchedFromOrigin = true;
48892
- entry.remoteReachable = true;
48893
- entry.remoteMainReachable = true;
48894
- entry.reachable = true;
48956
+ try {
48957
+ await verifyRemoteMainContainsCommit(submodulePath, gitlink.commit, "main");
48958
+ entry.fetchedFromOrigin = true;
48959
+ entry.remoteReachable = true;
48960
+ entry.remoteMainReachable = true;
48961
+ entry.reachable = true;
48962
+ } catch (e) {
48963
+ entry.remoteReachable = false;
48964
+ entry.remoteMainReachable = false;
48965
+ entry.publishRequired = true;
48966
+ const details = truncateValidationOutput(e?.stderr || e?.message || String(e));
48967
+ entry.error = `Submodule remote main reachability check failed for origin/main: ${details}`;
48968
+ if (options.allowAutoPublishSubmoduleMainCommits === true && entry.localReachable === true) {
48969
+ entry.autoPublishAllowed = true;
48970
+ entry.autoPublishAttempted = true;
48971
+ try {
48972
+ const publish = await publishCommitToRemoteMain(submodulePath, gitlink.commit, "main");
48973
+ entry.autoPublishRefspec = publish.refspec;
48974
+ entry.publishStdout = truncateValidationOutput(publish.stdout);
48975
+ entry.publishStderr = truncateValidationOutput(publish.stderr);
48976
+ entry.autoPublishSucceeded = true;
48977
+ await verifyRemoteMainContainsCommit(submodulePath, gitlink.commit, "main");
48978
+ entry.fetchedFromOrigin = true;
48979
+ entry.remoteReachable = true;
48980
+ entry.remoteMainReachable = true;
48981
+ entry.autoPublishVerified = true;
48982
+ entry.publishRequired = false;
48983
+ entry.reachable = true;
48984
+ entry.error = void 0;
48985
+ } catch (publishError) {
48986
+ entry.autoPublishSucceeded = false;
48987
+ entry.autoPublishVerified = false;
48988
+ const publishDetails = truncateValidationOutput(publishError?.stderr || publishError?.message || String(publishError));
48989
+ entry.error = `Submodule auto-publish to origin/main failed or could not be verified: ${publishDetails}`;
48990
+ }
48991
+ }
48992
+ }
48895
48993
  } catch (e) {
48896
48994
  entry.remoteReachable = false;
48897
48995
  entry.remoteMainReachable = false;
@@ -48911,7 +49009,9 @@ ${(0, import_node_path.resolve)(workspace || os17.tmpdir())}`;
48911
49009
  checked: entries.length,
48912
49010
  unreachable: unreachable.map((entry) => ({ ...entry, publishRequired: entry.publishRequired !== false })),
48913
49011
  entries: entries.map((entry) => entry.reachable ? entry : { ...entry, publishRequired: entry.publishRequired !== false }),
48914
- durationMs: Date.now() - startedAt
49012
+ durationMs: Date.now() - startedAt,
49013
+ autoPublishAllowed: options.allowAutoPublishSubmoduleMainCommits === true,
49014
+ autoPublishPolicySource: options.autoPublishPolicySource
48915
49015
  };
48916
49016
  } catch (e) {
48917
49017
  const unreachable = entries.filter((entry) => !entry.reachable).map((entry) => ({ ...entry, publishRequired: true }));
@@ -48921,6 +49021,8 @@ ${(0, import_node_path.resolve)(workspace || os17.tmpdir())}`;
48921
49021
  unreachable,
48922
49022
  entries: entries.map((entry) => entry.reachable ? entry : { ...entry, publishRequired: true }),
48923
49023
  durationMs: Date.now() - startedAt,
49024
+ autoPublishAllowed: options.allowAutoPublishSubmoduleMainCommits === true,
49025
+ autoPublishPolicySource: options.autoPublishPolicySource,
48924
49026
  error: truncateValidationOutput(e?.message || String(e))
48925
49027
  };
48926
49028
  }
@@ -50059,13 +50161,36 @@ ${(0, import_node_path.resolve)(workspace || os17.tmpdir())}`;
50059
50161
  };
50060
50162
  }
50061
50163
  const submoduleReachabilityStarted = Date.now();
50062
- const submoduleReachability = await runMeshRefineSubmoduleReachabilityGate(repoRoot, patchEquivalence.mergedTree || branchHead);
50164
+ const autoPublishSubmoduleMainCommits = resolveRefineryAutoPublishSubmoduleMainCommits(mesh, node.workspace);
50165
+ const submoduleReachability = await runMeshRefineSubmoduleReachabilityGate(repoRoot, patchEquivalence.mergedTree || branchHead, {
50166
+ allowAutoPublishSubmoduleMainCommits: autoPublishSubmoduleMainCommits.enabled,
50167
+ autoPublishPolicySource: autoPublishSubmoduleMainCommits.source
50168
+ });
50063
50169
  recordMeshRefineStage(refineStages, "submodule_reachability", submoduleReachability.status, submoduleReachabilityStarted, {
50064
50170
  checked: submoduleReachability.checked,
50171
+ autoPublishAllowed: submoduleReachability.autoPublishAllowed,
50172
+ autoPublishPolicySource: submoduleReachability.autoPublishPolicySource,
50173
+ autoPublished: submoduleReachability.entries.filter((entry) => entry.autoPublishAttempted).map((entry) => ({
50174
+ path: entry.path,
50175
+ commit: entry.commit,
50176
+ remote: entry.remote,
50177
+ remoteUrl: entry.remoteUrl,
50178
+ remoteMainBranch: entry.remoteMainBranch,
50179
+ refspec: entry.autoPublishRefspec,
50180
+ succeeded: entry.autoPublishSucceeded,
50181
+ verified: entry.autoPublishVerified,
50182
+ remoteMainReachable: entry.remoteMainReachable,
50183
+ error: entry.error
50184
+ })),
50065
50185
  unreachable: submoduleReachability.unreachable.map((entry) => ({
50066
50186
  path: entry.path,
50067
50187
  commit: entry.commit,
50068
50188
  publishRequired: entry.publishRequired === true,
50189
+ autoPublishAllowed: entry.autoPublishAllowed,
50190
+ autoPublishAttempted: entry.autoPublishAttempted,
50191
+ autoPublishSucceeded: entry.autoPublishSucceeded,
50192
+ autoPublishVerified: entry.autoPublishVerified,
50193
+ autoPublishRefspec: entry.autoPublishRefspec,
50069
50194
  remote: entry.remote,
50070
50195
  remoteUrl: entry.remoteUrl,
50071
50196
  remoteReachable: entry.remoteReachable,
@@ -50099,6 +50224,11 @@ ${(0, import_node_path.resolve)(workspace || os17.tmpdir())}`;
50099
50224
  remoteReachable: entry.remoteReachable,
50100
50225
  remoteMainBranch: entry.remoteMainBranch,
50101
50226
  remoteMainReachable: entry.remoteMainReachable,
50227
+ autoPublishAllowed: entry.autoPublishAllowed,
50228
+ autoPublishAttempted: entry.autoPublishAttempted,
50229
+ autoPublishSucceeded: entry.autoPublishSucceeded,
50230
+ autoPublishVerified: entry.autoPublishVerified,
50231
+ autoPublishRefspec: entry.autoPublishRefspec,
50102
50232
  error: entry.error
50103
50233
  })),
50104
50234
  branch,
@@ -50173,7 +50303,7 @@ ${(0, import_node_path.resolve)(workspace || os17.tmpdir())}`;
50173
50303
  appendLedgerEntry2(meshId, {
50174
50304
  kind: "node_removed",
50175
50305
  nodeId,
50176
- payload: { refined: true, mergedBranch: branch, into: baseBranch, validationSummary, patchEquivalence }
50306
+ payload: { refined: true, mergedBranch: branch, into: baseBranch, validationSummary, patchEquivalence, submoduleReachability }
50177
50307
  });
50178
50308
  recordMeshRefineStage(refineStages, "ledger", "passed", ledgerStarted);
50179
50309
  } catch (e) {
@@ -50201,6 +50331,7 @@ ${(0, import_node_path.resolve)(workspace || os17.tmpdir())}`;
50201
50331
  removeResult,
50202
50332
  validationSummary,
50203
50333
  patchEquivalence,
50334
+ submoduleReachability,
50204
50335
  mergeResult,
50205
50336
  refineStages,
50206
50337
  ...ledgerError ? { ledgerError } : {},
@@ -50215,6 +50346,7 @@ ${(0, import_node_path.resolve)(workspace || os17.tmpdir())}`;
50215
50346
  removeResult,
50216
50347
  validationSummary,
50217
50348
  patchEquivalence,
50349
+ submoduleReachability,
50218
50350
  mergeResult,
50219
50351
  refineStages,
50220
50352
  ...ledgerError ? { ledgerError } : {},