@adhdev/daemon-core 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
@@ -39,6 +39,7 @@ var init_repo_mesh_types = __esm({
39
39
  requirePreTaskCheckpoint: false,
40
40
  requirePostTaskCheckpoint: true,
41
41
  requireApprovalForPush: true,
42
+ allowAutoPublishSubmoduleMainCommits: false,
42
43
  requireApprovalForDestructiveGit: true,
43
44
  dirtyWorkspaceBehavior: "warn",
44
45
  maxParallelTasks: 2,
@@ -789,6 +790,7 @@ function mergeMeshPolicy(base, patch) {
789
790
  }
790
791
  const maxParallelTasks = Number(policy.maxParallelTasks);
791
792
  policy.maxParallelTasks = Number.isFinite(maxParallelTasks) ? Math.max(1, Math.min(8, Math.floor(maxParallelTasks))) : 2;
793
+ policy.allowAutoPublishSubmoduleMainCommits = policy.allowAutoPublishSubmoduleMainCommits === true;
792
794
  if (!SESSION_CLEANUP_MODES.has(String(policy.sessionCleanupOnNodeRemove))) {
793
795
  policy.sessionCleanupOnNodeRemove = "preserve";
794
796
  }
@@ -1178,6 +1180,9 @@ function buildPolicySection(policy) {
1178
1180
  if (policy.requirePreTaskCheckpoint) rules.push("- Create a git checkpoint **before** starting each task");
1179
1181
  if (policy.requirePostTaskCheckpoint) rules.push("- Create a git checkpoint **after** each task completes");
1180
1182
  if (policy.requireApprovalForPush) rules.push("- **Ask for user approval** before pushing to remote");
1183
+ if (policy.allowAutoPublishSubmoduleMainCommits) {
1184
+ rules.push("- Refinery may auto-publish unreachable submodule gitlink commits to submodule origin/main with non-force pushes after validation and patch-equivalence pass");
1185
+ }
1181
1186
  if (policy.requireApprovalForDestructiveGit) rules.push("- **Ask for user approval** before destructive git operations (force push, reset, etc.)");
1182
1187
  const dirtyBehavior = {
1183
1188
  block: "- **Do not** send tasks to nodes with dirty workspaces",
@@ -1209,7 +1214,7 @@ function buildRulesSection(coordinatorCliType) {
1209
1214
  - **Clean up worktree nodes.** After a worktree task completes and its changes are merged or checkpointed, call \`mesh_remove_node\` to free resources.
1210
1215
  - **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.
1211
1216
  - **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.
1212
- - **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\`.
1217
+ - **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.
1213
1218
  - **Name worktree branches meaningfully.** Use descriptive names like \`feat/auth-refactor\` or \`fix/build-123\`.${coordinatorNote}`;
1214
1219
  }
1215
1220
  var TOOLS_SECTION, TOOL_EXPOSURE_PREFLIGHT_SECTION, WORKFLOW_SECTION;
@@ -1256,7 +1261,7 @@ Before doing any coordinator work, confirm that the actual callable tool list in
1256
1261
  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\`.
1257
1262
  5. **Verify** \u2014 When a task reports completion or git work is visible, call \`mesh_git_status\` to verify changes were made.
1258
1263
  6. **Checkpoint** \u2014 Call \`mesh_checkpoint\` to save the work.
1259
- 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.
1264
+ 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.
1260
1265
  8. **Clean up** \u2014 Remove worktree nodes via \`mesh_remove_node\` after their work is merged or no longer needed.
1261
1266
  9. **Report** \u2014 Summarize what was done, what changed, any issues, and the branch convergence state.
1262
1267
 
@@ -3206,7 +3211,8 @@ function injectMeshSystemMessage(components, args) {
3206
3211
  const providerSessionId = readNonEmptyString2(args.metadataEvent.providerSessionId) || void 0;
3207
3212
  const finalSummary = readNonEmptyString2(args.metadataEvent.finalSummary) || void 0;
3208
3213
  const workerResult = readWorkerResultMetadata(args.metadataEvent);
3209
- const completedTask = sessionId ? updateSessionTaskStatus(args.meshId, sessionId, "completed") : null;
3214
+ const hasCompletionEvidence = !!finalSummary || !!workerResult;
3215
+ const completedTask = sessionId && hasCompletionEvidence ? updateSessionTaskStatus(args.meshId, sessionId, "completed") : null;
3210
3216
  if (completedTask) {
3211
3217
  completedTaskForLedger = { id: completedTask.id };
3212
3218
  try {
@@ -8680,6 +8686,11 @@ var MESH_REFINE_CONFIG_SCHEMA = {
8680
8686
  required: ["version"],
8681
8687
  properties: {
8682
8688
  version: { const: 1 },
8689
+ allowAutoPublishSubmoduleMainCommits: {
8690
+ type: "boolean",
8691
+ default: false,
8692
+ 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."
8693
+ },
8683
8694
  validation: {
8684
8695
  type: "object",
8685
8696
  additionalProperties: false,
@@ -8772,6 +8783,9 @@ function validateMeshRefineConfig(config, source = "inline") {
8772
8783
  const rejectedCommands = [];
8773
8784
  if (!isRecord(config)) return { valid: false, errors: ["config must be an object"], commands, rejectedCommands };
8774
8785
  if (config.version !== 1) errors.push("version must be 1");
8786
+ if (config.allowAutoPublishSubmoduleMainCommits !== void 0 && typeof config.allowAutoPublishSubmoduleMainCommits !== "boolean") {
8787
+ errors.push("allowAutoPublishSubmoduleMainCommits must be a boolean when provided");
8788
+ }
8775
8789
  const validation = config.validation;
8776
8790
  if (validation !== void 0 && !isRecord(validation)) errors.push("validation must be an object");
8777
8791
  const rawCommands = isRecord(validation) ? validation.commands : void 0;
@@ -16731,7 +16745,7 @@ async function handleReadChat(h, args) {
16731
16745
  returnedMessages,
16732
16746
  ptyStatusApprovalOnly: false
16733
16747
  });
16734
- if (supportsCliNativeTranscript(providerType)) {
16748
+ if (supportsCliNativeTranscript(providerType) && provider?.canonicalHistory?.mode === "native-source") {
16735
16749
  const agentStr = provider?.type || args?.agentType || getCurrentProviderType(h, adapter.cliType);
16736
16750
  const workspace = typeof args?.workspace === "string" ? args.workspace : typeof h.currentSession?.workspace === "string" ? h.currentSession.workspace : typeof adapter.workingDir === "string" ? adapter.workingDir : void 0;
16737
16751
  const nativeHistoryLimit = Math.max(
@@ -16890,6 +16904,17 @@ async function handleReadChat(h, args) {
16890
16904
  freshEnough: true,
16891
16905
  ptyStatusApprovalOnly: false
16892
16906
  });
16907
+ const requiresNativeSource = supportsCliNativeTranscript(agentStr) && provider?.canonicalHistory?.mode === "native-source";
16908
+ if (requiresNativeSource && !nativeSelected) {
16909
+ return {
16910
+ success: false,
16911
+ code: "native_history_not_safely_available",
16912
+ error: "Provider-native history was not safely available for the requested CLI session.",
16913
+ providerSessionId: historyProviderSessionId,
16914
+ messageSource,
16915
+ transcriptProvenance: messageSource
16916
+ };
16917
+ }
16893
16918
  return buildReadChatCommandResult({
16894
16919
  messages: historyMessages,
16895
16920
  status: "idle",
@@ -21788,6 +21813,14 @@ function hasAdapterPendingResponse(adapter) {
21788
21813
  function countMessages(value) {
21789
21814
  return Array.isArray(value) ? value.length : 0;
21790
21815
  }
21816
+ function hasFinalAssistantMessage(value) {
21817
+ const messages = Array.isArray(value) ? value : [];
21818
+ const last = messages[messages.length - 1];
21819
+ if (!last || last.role !== "assistant") return false;
21820
+ if (last.bubbleState === "streaming") return false;
21821
+ if (last.meta?.streaming === true) return false;
21822
+ return typeof last.content === "string" && last.content.trim().length > 0;
21823
+ }
21791
21824
  function hasZeroMessageStartingLaunch(adapter) {
21792
21825
  const adapterStatus = adapter?.getStatus?.({ allowParse: false }) ?? adapter?.getStatus?.() ?? {};
21793
21826
  const parsedStatus = typeof adapter?.getScriptParsedStatus === "function" ? adapter.getScriptParsedStatus() : {};
@@ -21799,6 +21832,17 @@ function hasZeroMessageStartingLaunch(adapter) {
21799
21832
  if (countMessages(adapterStatus?.messages) > 0 || countMessages(parsedStatus?.messages) > 0) return false;
21800
21833
  return !hasAdapterPendingResponse(adapter);
21801
21834
  }
21835
+ function hasCompletedStartingLaunch(adapter) {
21836
+ const adapterStatus = adapter?.getStatus?.({ allowParse: false }) ?? adapter?.getStatus?.() ?? {};
21837
+ const adapterRawStatus = normalizeAgentStatus(adapterStatus?.status);
21838
+ if (adapterRawStatus !== "starting") return false;
21839
+ if (hasAdapterPendingResponse(adapter)) return false;
21840
+ const parsedStatus = typeof adapter?.getScriptParsedStatus === "function" ? adapter.getScriptParsedStatus() : {};
21841
+ const parsedRawStatus = normalizeAgentStatus(parsedStatus?.status);
21842
+ if (parsedRawStatus !== "idle") return false;
21843
+ if (hasNonEmptyModalButtons2(adapterStatus?.activeModal ?? adapterStatus?.modal ?? parsedStatus?.activeModal ?? parsedStatus?.modal)) return false;
21844
+ return hasFinalAssistantMessage(parsedStatus?.messages);
21845
+ }
21802
21846
  function shouldSuppressStaleParsedBusyStatus(adapterStatus, parsedStatus, adapter) {
21803
21847
  const parsedRawStatus = normalizeAgentStatus(parsedStatus?.status);
21804
21848
  if (!BUSY_AGENT_STATUSES.has(parsedRawStatus)) return false;
@@ -21808,6 +21852,7 @@ function shouldSuppressStaleParsedBusyStatus(adapterStatus, parsedStatus, adapte
21808
21852
  }
21809
21853
  function getEffectiveAgentSendStatus(adapter) {
21810
21854
  const adapterStatus = normalizeAgentStatus(adapter?.getStatus?.({ allowParse: false })?.status ?? adapter?.getStatus?.()?.status);
21855
+ if (adapterStatus === "starting" && hasCompletedStartingLaunch(adapter)) return "idle";
21811
21856
  if (adapterStatus && adapterStatus !== "idle") return adapterStatus;
21812
21857
  if (adapterStatus !== "idle") return adapterStatus;
21813
21858
  if (typeof adapter?.getScriptParsedStatus !== "function") return adapterStatus;
@@ -26786,6 +26831,16 @@ function buildSubmodulePublishRequiredNextStep(entries) {
26786
26831
  const refs = entries.map((entry) => `${entry.path}@${entry.commit}`).join(", ");
26787
26832
  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.`;
26788
26833
  }
26834
+ function resolveRefineryAutoPublishSubmoduleMainCommits(mesh, workspace) {
26835
+ if (mesh?.policy?.allowAutoPublishSubmoduleMainCommits === true) {
26836
+ return { enabled: true, source: "mesh.policy.allowAutoPublishSubmoduleMainCommits" };
26837
+ }
26838
+ const loaded = loadMeshRefineConfig(mesh, workspace);
26839
+ if (loaded.config?.allowAutoPublishSubmoduleMainCommits === true) {
26840
+ return { enabled: true, source: loaded.path || loaded.source };
26841
+ }
26842
+ return { enabled: false };
26843
+ }
26789
26844
  async function computeGitPatchId(cwd, fromRef, toRef) {
26790
26845
  const { execFileSync: execFileSync3 } = await import("child_process");
26791
26846
  const diff = execFileSync3("git", ["diff", "--patch", "--full-index", fromRef, toRef], {
@@ -26854,7 +26909,7 @@ async function runMeshRefinePatchEquivalenceGate(repoRoot, baseHead, branchHead)
26854
26909
  };
26855
26910
  }
26856
26911
  }
26857
- async function runMeshRefineSubmoduleReachabilityGate(repoRoot, mergedTree) {
26912
+ async function runMeshRefineSubmoduleReachabilityGate(repoRoot, mergedTree, options = {}) {
26858
26913
  const startedAt = Date.now();
26859
26914
  const entries = [];
26860
26915
  try {
@@ -26875,6 +26930,17 @@ async function runMeshRefineSubmoduleReachabilityGate(repoRoot, mergedTree) {
26875
26930
  await runGit2(submodulePath, ["-c", "protocol.file.allow=always", "fetch", "origin", `refs/heads/${branch}:refs/remotes/origin/${branch}`]);
26876
26931
  await runGit2(submodulePath, ["merge-base", "--is-ancestor", commit, `refs/remotes/origin/${branch}`]);
26877
26932
  };
26933
+ const publishCommitToRemoteMain = async (submodulePath, commit, branch = "main") => {
26934
+ const refspec = `${commit}:refs/heads/${branch}`;
26935
+ const { stdout, stderr } = await execFileAsync3("git", ["push", "origin", refspec], {
26936
+ cwd: submodulePath,
26937
+ encoding: "utf8",
26938
+ timeout: 3e4,
26939
+ maxBuffer: REFINE_PATCH_EQUIVALENCE_OUTPUT_LIMIT_BYTES,
26940
+ windowsHide: true
26941
+ });
26942
+ return { stdout: String(stdout || ""), stderr: String(stderr || ""), refspec };
26943
+ };
26878
26944
  const treeOutput = await runGit2(repoRoot, ["ls-tree", "-r", "-z", mergedTree]);
26879
26945
  const gitlinks = treeOutput.split("\0").filter(Boolean).map((record) => {
26880
26946
  const match = /^160000\s+commit\s+([0-9a-f]{40})\t(.+)$/.exec(record);
@@ -26915,11 +26981,43 @@ async function runMeshRefineSubmoduleReachabilityGate(repoRoot, mergedTree) {
26915
26981
  continue;
26916
26982
  }
26917
26983
  entry.remoteMainBranch = "main";
26918
- await verifyRemoteMainContainsCommit(submodulePath, gitlink.commit, "main");
26919
- entry.fetchedFromOrigin = true;
26920
- entry.remoteReachable = true;
26921
- entry.remoteMainReachable = true;
26922
- entry.reachable = true;
26984
+ try {
26985
+ await verifyRemoteMainContainsCommit(submodulePath, gitlink.commit, "main");
26986
+ entry.fetchedFromOrigin = true;
26987
+ entry.remoteReachable = true;
26988
+ entry.remoteMainReachable = true;
26989
+ entry.reachable = true;
26990
+ } catch (e) {
26991
+ entry.remoteReachable = false;
26992
+ entry.remoteMainReachable = false;
26993
+ entry.publishRequired = true;
26994
+ const details = truncateValidationOutput(e?.stderr || e?.message || String(e));
26995
+ entry.error = `Submodule remote main reachability check failed for origin/main: ${details}`;
26996
+ if (options.allowAutoPublishSubmoduleMainCommits === true && entry.localReachable === true) {
26997
+ entry.autoPublishAllowed = true;
26998
+ entry.autoPublishAttempted = true;
26999
+ try {
27000
+ const publish = await publishCommitToRemoteMain(submodulePath, gitlink.commit, "main");
27001
+ entry.autoPublishRefspec = publish.refspec;
27002
+ entry.publishStdout = truncateValidationOutput(publish.stdout);
27003
+ entry.publishStderr = truncateValidationOutput(publish.stderr);
27004
+ entry.autoPublishSucceeded = true;
27005
+ await verifyRemoteMainContainsCommit(submodulePath, gitlink.commit, "main");
27006
+ entry.fetchedFromOrigin = true;
27007
+ entry.remoteReachable = true;
27008
+ entry.remoteMainReachable = true;
27009
+ entry.autoPublishVerified = true;
27010
+ entry.publishRequired = false;
27011
+ entry.reachable = true;
27012
+ entry.error = void 0;
27013
+ } catch (publishError) {
27014
+ entry.autoPublishSucceeded = false;
27015
+ entry.autoPublishVerified = false;
27016
+ const publishDetails = truncateValidationOutput(publishError?.stderr || publishError?.message || String(publishError));
27017
+ entry.error = `Submodule auto-publish to origin/main failed or could not be verified: ${publishDetails}`;
27018
+ }
27019
+ }
27020
+ }
26923
27021
  } catch (e) {
26924
27022
  entry.remoteReachable = false;
26925
27023
  entry.remoteMainReachable = false;
@@ -26939,7 +27037,9 @@ async function runMeshRefineSubmoduleReachabilityGate(repoRoot, mergedTree) {
26939
27037
  checked: entries.length,
26940
27038
  unreachable: unreachable.map((entry) => ({ ...entry, publishRequired: entry.publishRequired !== false })),
26941
27039
  entries: entries.map((entry) => entry.reachable ? entry : { ...entry, publishRequired: entry.publishRequired !== false }),
26942
- durationMs: Date.now() - startedAt
27040
+ durationMs: Date.now() - startedAt,
27041
+ autoPublishAllowed: options.allowAutoPublishSubmoduleMainCommits === true,
27042
+ autoPublishPolicySource: options.autoPublishPolicySource
26943
27043
  };
26944
27044
  } catch (e) {
26945
27045
  const unreachable = entries.filter((entry) => !entry.reachable).map((entry) => ({ ...entry, publishRequired: true }));
@@ -26949,6 +27049,8 @@ async function runMeshRefineSubmoduleReachabilityGate(repoRoot, mergedTree) {
26949
27049
  unreachable,
26950
27050
  entries: entries.map((entry) => entry.reachable ? entry : { ...entry, publishRequired: true }),
26951
27051
  durationMs: Date.now() - startedAt,
27052
+ autoPublishAllowed: options.allowAutoPublishSubmoduleMainCommits === true,
27053
+ autoPublishPolicySource: options.autoPublishPolicySource,
26952
27054
  error: truncateValidationOutput(e?.message || String(e))
26953
27055
  };
26954
27056
  }
@@ -28087,13 +28189,36 @@ var DaemonCommandRouter = class {
28087
28189
  };
28088
28190
  }
28089
28191
  const submoduleReachabilityStarted = Date.now();
28090
- const submoduleReachability = await runMeshRefineSubmoduleReachabilityGate(repoRoot, patchEquivalence.mergedTree || branchHead);
28192
+ const autoPublishSubmoduleMainCommits = resolveRefineryAutoPublishSubmoduleMainCommits(mesh, node.workspace);
28193
+ const submoduleReachability = await runMeshRefineSubmoduleReachabilityGate(repoRoot, patchEquivalence.mergedTree || branchHead, {
28194
+ allowAutoPublishSubmoduleMainCommits: autoPublishSubmoduleMainCommits.enabled,
28195
+ autoPublishPolicySource: autoPublishSubmoduleMainCommits.source
28196
+ });
28091
28197
  recordMeshRefineStage(refineStages, "submodule_reachability", submoduleReachability.status, submoduleReachabilityStarted, {
28092
28198
  checked: submoduleReachability.checked,
28199
+ autoPublishAllowed: submoduleReachability.autoPublishAllowed,
28200
+ autoPublishPolicySource: submoduleReachability.autoPublishPolicySource,
28201
+ autoPublished: submoduleReachability.entries.filter((entry) => entry.autoPublishAttempted).map((entry) => ({
28202
+ path: entry.path,
28203
+ commit: entry.commit,
28204
+ remote: entry.remote,
28205
+ remoteUrl: entry.remoteUrl,
28206
+ remoteMainBranch: entry.remoteMainBranch,
28207
+ refspec: entry.autoPublishRefspec,
28208
+ succeeded: entry.autoPublishSucceeded,
28209
+ verified: entry.autoPublishVerified,
28210
+ remoteMainReachable: entry.remoteMainReachable,
28211
+ error: entry.error
28212
+ })),
28093
28213
  unreachable: submoduleReachability.unreachable.map((entry) => ({
28094
28214
  path: entry.path,
28095
28215
  commit: entry.commit,
28096
28216
  publishRequired: entry.publishRequired === true,
28217
+ autoPublishAllowed: entry.autoPublishAllowed,
28218
+ autoPublishAttempted: entry.autoPublishAttempted,
28219
+ autoPublishSucceeded: entry.autoPublishSucceeded,
28220
+ autoPublishVerified: entry.autoPublishVerified,
28221
+ autoPublishRefspec: entry.autoPublishRefspec,
28097
28222
  remote: entry.remote,
28098
28223
  remoteUrl: entry.remoteUrl,
28099
28224
  remoteReachable: entry.remoteReachable,
@@ -28127,6 +28252,11 @@ var DaemonCommandRouter = class {
28127
28252
  remoteReachable: entry.remoteReachable,
28128
28253
  remoteMainBranch: entry.remoteMainBranch,
28129
28254
  remoteMainReachable: entry.remoteMainReachable,
28255
+ autoPublishAllowed: entry.autoPublishAllowed,
28256
+ autoPublishAttempted: entry.autoPublishAttempted,
28257
+ autoPublishSucceeded: entry.autoPublishSucceeded,
28258
+ autoPublishVerified: entry.autoPublishVerified,
28259
+ autoPublishRefspec: entry.autoPublishRefspec,
28130
28260
  error: entry.error
28131
28261
  })),
28132
28262
  branch,
@@ -28201,7 +28331,7 @@ var DaemonCommandRouter = class {
28201
28331
  appendLedgerEntry2(meshId, {
28202
28332
  kind: "node_removed",
28203
28333
  nodeId,
28204
- payload: { refined: true, mergedBranch: branch, into: baseBranch, validationSummary, patchEquivalence }
28334
+ payload: { refined: true, mergedBranch: branch, into: baseBranch, validationSummary, patchEquivalence, submoduleReachability }
28205
28335
  });
28206
28336
  recordMeshRefineStage(refineStages, "ledger", "passed", ledgerStarted);
28207
28337
  } catch (e) {
@@ -28229,6 +28359,7 @@ var DaemonCommandRouter = class {
28229
28359
  removeResult,
28230
28360
  validationSummary,
28231
28361
  patchEquivalence,
28362
+ submoduleReachability,
28232
28363
  mergeResult,
28233
28364
  refineStages,
28234
28365
  ...ledgerError ? { ledgerError } : {},
@@ -28243,6 +28374,7 @@ var DaemonCommandRouter = class {
28243
28374
  removeResult,
28244
28375
  validationSummary,
28245
28376
  patchEquivalence,
28377
+ submoduleReachability,
28246
28378
  mergeResult,
28247
28379
  refineStages,
28248
28380
  ...ledgerError ? { ledgerError } : {},