@bridge_gpt/mcp-server 0.2.67 → 0.2.68

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.
Files changed (114) hide show
  1. package/README.md +178 -15
  2. package/build/agent-launchers/claude-executor-adapter.js +27 -0
  3. package/build/agents.generated.js +22 -2
  4. package/build/bitbucket-workspace-remote.js +136 -0
  5. package/build/bootstrap-project-identity.js +24 -0
  6. package/build/bridge-permissions.js +829 -0
  7. package/build/claude-settings.js +18 -0
  8. package/build/cli-help.js +21 -0
  9. package/build/command-assets-doctor.js +24 -70
  10. package/build/command-provisioning.js +29 -5
  11. package/build/commands.generated.js +8 -8
  12. package/build/conductor/bridge-api-client.js +714 -0
  13. package/build/conductor/command-drift-production.js +92 -0
  14. package/build/conductor/command-drift.js +89 -0
  15. package/build/conductor/doctor.js +69 -26
  16. package/build/conductor/epic-branch-ci-inspection.js +1375 -0
  17. package/build/conductor/epic-implementer-cli.js +76 -22
  18. package/build/conductor/gate-discovery.js +890 -0
  19. package/build/conductor/install-doctor.js +15 -3
  20. package/build/conductor/json-output.js +63 -0
  21. package/build/conductor/readiness-cli.js +95 -10
  22. package/build/conductor/readiness-sections.js +369 -3
  23. package/build/conductor/readiness.js +211 -8
  24. package/build/conductor/recovery-cli.js +110 -4
  25. package/build/conductor/recovery-operations.js +99 -1
  26. package/build/connect-bitbucket-api.js +41 -6
  27. package/build/connect-bitbucket.js +106 -33
  28. package/build/credential-store.js +207 -47
  29. package/build/docs.generated.js +57 -3
  30. package/build/doctor.js +92 -1
  31. package/build/drive-epic.js +45 -8
  32. package/build/epic-coherence-input.test-fixtures.js +4 -3
  33. package/build/epic-implementer-bin.js +1374 -25
  34. package/build/epic-workarounds-path.js +39 -0
  35. package/build/executor/cli.js +30 -0
  36. package/build/executor/completion-contract.js +18 -5
  37. package/build/executor/deps.js +4 -1
  38. package/build/executor/gate-qualification-job.js +499 -0
  39. package/build/executor/guarded-fast-forward-push.js +129 -0
  40. package/build/executor/integration-job.js +122 -8
  41. package/build/executor/job-errors.js +8 -1
  42. package/build/executor/job-runner.js +589 -47
  43. package/build/executor/likely-tests.js +290 -0
  44. package/build/executor/live-worker-registry.js +1 -1
  45. package/build/executor/observation.js +31 -2
  46. package/build/executor/packaged-recipe.js +106 -0
  47. package/build/executor/permissions.js +115 -28
  48. package/build/executor/platform.js +1 -1
  49. package/build/executor/preflight.js +61 -12
  50. package/build/executor/process-containment.js +36 -12
  51. package/build/executor/process.js +15 -7
  52. package/build/executor/prompt-spec.js +33 -1
  53. package/build/executor/recently-failed-tests-file.js +71 -0
  54. package/build/executor/reconcile-overlap-job.js +41 -23
  55. package/build/executor/required-verification.js +1 -1
  56. package/build/executor/required-work-ledger.js +105 -17
  57. package/build/executor/retirement.js +69 -0
  58. package/build/executor/runner.js +114 -11
  59. package/build/executor/test-clock.js +15 -0
  60. package/build/executor/types.js +32 -0
  61. package/build/executor/viewer-tabs.js +58 -8
  62. package/build/executor/worker-command.js +23 -7
  63. package/build/executor/worker-diagnostics.js +37 -0
  64. package/build/executor/worker-finalization.js +31 -5
  65. package/build/executor/worker-guard-hook.js +179 -25
  66. package/build/executor/worker-log.js +4 -3
  67. package/build/executor/worker-verification-guidance.js +37 -0
  68. package/build/executor/worktree.js +88 -11
  69. package/build/first-build-advisory.js +97 -0
  70. package/build/generated-assets-advisory.js +14 -0
  71. package/build/generated-assets-catalog.js +66 -0
  72. package/build/generated-assets-context.js +46 -0
  73. package/build/generated-assets-dependencies.js +26 -0
  74. package/build/generated-assets-doctor.js +50 -0
  75. package/build/generated-assets-health.js +65 -0
  76. package/build/generated-assets-host.js +17 -0
  77. package/build/generated-assets-inventory.js +17 -0
  78. package/build/generated-assets-paths.js +60 -0
  79. package/build/generated-assets-publisher.js +133 -0
  80. package/build/generated-assets-remedy.js +25 -0
  81. package/build/generated-assets-repair.js +72 -0
  82. package/build/generated-assets-session.js +71 -0
  83. package/build/generated-assets-test-support.js +35 -0
  84. package/build/index.js +964 -768
  85. package/build/init.js +54 -177
  86. package/build/install-bridge-conductor-gate.js +1372 -0
  87. package/build/install-bridge-conductor.js +289 -36
  88. package/build/install-bridge.js +544 -37
  89. package/build/mcp-install-state.js +50 -4
  90. package/build/merge-workflow-install.js +3 -4
  91. package/build/pipeline-utils.js +6 -2
  92. package/build/pipelines.generated.js +22 -142
  93. package/build/plan-execution-ledger.js +2 -32
  94. package/build/plane/manifest.js +16 -1
  95. package/build/plane/preflight.js +54 -1
  96. package/build/printed-remedy-commands.js +16 -1
  97. package/build/readme.generated.js +1 -1
  98. package/build/repair-assets.js +93 -0
  99. package/build/run-unit-tests-launcher.js +130 -49
  100. package/build/secret-redaction.js +33 -0
  101. package/build/setup-epic.js +108 -3
  102. package/build/start-tickets-prereqs.js +70 -16
  103. package/build/start-tickets.js +29 -5
  104. package/build/tool-surface-gating.js +36 -0
  105. package/build/upgrade-cli.js +55 -1
  106. package/build/version.generated.js +3 -3
  107. package/build/worker-guard-hook-bin.js +3 -2
  108. package/build/worker-guard-hook-main.js +1 -1
  109. package/build/worktree-core.js +15 -2
  110. package/docs/EPIC-IMPLEMENTER-INSTALL.md +30 -12
  111. package/docs/EPIC-IMPLEMENTER.md +68 -2
  112. package/package.json +3 -3
  113. package/pipelines/greenfield-setup.json +4 -128
  114. package/pipelines/implement-ticket.json +3 -2
package/README.md CHANGED
@@ -10,16 +10,35 @@ From your **project root**, run:
10
10
  npx -y @bridge_gpt/mcp-server install
11
11
  ```
12
12
 
13
- That is the whole setup command. It works whether or not you already have a Bridge
14
- account — it will ask.
13
+ That command starts guided setup. It works whether or not you already have a Bridge
14
+ account — it will ask; follow the remaining onboarding instructions afterward.
15
+
16
+ ### Already ran `npm i @bridge_gpt/mcp-server`?
17
+
18
+ > The package and its executable aliases are installed, but your intended project
19
+ > and MCP host still need setup. From your intended project root, run:
20
+ >
21
+ > ```bash
22
+ > npx -y @bridge_gpt/mcp-server install
23
+ > ```
24
+ >
25
+ > You do not need to uninstall the package first. [Continue with the step-by-step
26
+ > setup instructions](#installing-step-by-step) for sign-in, host selection,
27
+ > reload/trust, and agent handoff.
28
+
29
+ > Package installation is passive: Bridge cannot detect or notify someone who only
30
+ > installs the package and does nothing else. Successful lifecycle output is not a
31
+ > reliable default-install notification because `foreground-scripts` normally
32
+ > defaults to false, and `ignore-scripts` can disable hooks entirely.
15
33
 
16
34
  > We recommend **the command above** instead of the `npm i @bridge_gpt/mcp-server`
17
35
  > one in npm's sidebar, because it **will make set up much easier**.
18
36
 
19
37
  **What it will do**
20
38
 
21
- - **Bootstraps the Bridge MCP for you** — one command and your editor's agent can
22
- use Bridge's tools and slash commands on this project.
39
+ - **Starts guided Bridge MCP setup** — after completing the remaining onboarding
40
+ instructions, your editor's agent can use Bridge's tools and slash commands on
41
+ this project.
23
42
  - Registers a `bridge` MCP server in your editor's MCP config, leaving any
24
43
  other servers you have configured untouched.
25
44
  - Creates and updates the files it needs inside your project root: slash commands
@@ -217,8 +236,8 @@ re-run the command from the right directory — if you already had a `.vscode/`,
217
236
  (`npx -y @bridge_gpt/mcp-server`) with no subcommand, you started the MCP *server*,
218
237
  not the installer. It is waiting for an editor to connect over stdio, which is
219
238
  exactly what it should do when your editor launches it — but from a terminal it
220
- looks like a hang. It prints a line saying so. Press Ctrl-C and run
221
- `npx -y @bridge_gpt/mcp-server install` instead. The explicit spelling
239
+ looks like a hang. It prints a stderr guidance block explaining this. Press Ctrl-C
240
+ and run `npx -y @bridge_gpt/mcp-server install` instead. The explicit spelling
222
241
  `npx -y @bridge_gpt/mcp-server serve` starts the server on purpose.
223
242
 
224
243
  **"It can't reach Bridge" or "my key was rejected."** The installer checks
@@ -374,7 +393,7 @@ later boot.
374
393
  "mcpServers": {
375
394
  "bridge": {
376
395
  "command": "npx",
377
- "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.67", "serve"],
396
+ "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.68", "serve"],
378
397
  "env": {
379
398
  "BAPI_BASE_URL": "https://bridgegpt-api.com",
380
399
  "BAPI_REPO_NAME": "your-repo",
@@ -396,7 +415,7 @@ later boot.
396
415
  "bridge": {
397
416
  "type": "stdio",
398
417
  "command": "npx",
399
- "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.67", "serve"],
418
+ "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.68", "serve"],
400
419
  "env": {
401
420
  "BAPI_BASE_URL": "https://bridgegpt-api.com",
402
421
  "BAPI_REPO_NAME": "your-repo",
@@ -418,7 +437,7 @@ later boot.
418
437
  "bridge": {
419
438
  "type": "stdio",
420
439
  "command": "npx",
421
- "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.67", "serve"],
440
+ "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.68", "serve"],
422
441
  "env": {
423
442
  "BAPI_BASE_URL": "https://bridgegpt-api.com",
424
443
  "BAPI_REPO_NAME": "your-repo",
@@ -441,7 +460,7 @@ Windsurf only supports global MCP configuration.
441
460
  "mcpServers": {
442
461
  "bridge": {
443
462
  "command": "npx",
444
- "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.67", "serve"],
463
+ "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.68", "serve"],
445
464
  "env": {
446
465
  "BAPI_BASE_URL": "https://bridgegpt-api.com",
447
466
  "BAPI_REPO_NAME": "your-repo",
@@ -460,7 +479,7 @@ Windsurf only supports global MCP configuration.
460
479
  ```toml
461
480
  [mcp_servers.bridge]
462
481
  command = "npx"
463
- args = ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.67", "serve"]
482
+ args = ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.68", "serve"]
464
483
 
465
484
  [mcp_servers.bridge.env]
466
485
  BAPI_BASE_URL = "https://bridgegpt-api.com"
@@ -1071,14 +1090,15 @@ By hand, the outline is:
1071
1090
  npx -y @bridge_gpt/mcp-server install # if Bridge is not installed yet
1072
1091
  npx -y @bridge_gpt/mcp-server connect-github --repo <repo_name> # connect the GitHub App
1073
1092
  npx -y @bridge_gpt/mcp-server install conductor --required-check "epic-implementer-ci / gate" \
1074
- --allowed-bot "<bot>" --secret-name <SECRET_NAME> --branches "<default branch>,epic/**"
1093
+ --review-policy verdict_protocol \
1094
+ --allowed-bot "<bot>" --secret-name <SECRET_NAME> --branches "<default branch>,epic/**" # AI review is opt-in; omit all four to skip the claude-review workflow
1075
1095
  export BAPI_LOCAL_MERGE_TOKEN="$(gh auth token)" # in the shell that runs drive-epic
1076
1096
  npx -y @bridge_gpt/mcp-server epic-implementer readiness --json # read-only check of every prerequisite
1077
1097
  ```
1078
1098
 
1079
1099
  After `install conductor`, restart your MCP client so the Epic Implementer tools
1080
1100
  appear. Add `epic-implementer-ci.yml` (the guide has a template) and the
1081
- `claude-review.yml` that `install conductor` wrote, through a pull request into
1101
+ `claude-review.yml` that `install conductor` wrote (only when you opted in to AI review with `--review-policy verdict_protocol`), through a pull request into
1082
1102
  your default branch. Once it merges, index the repository with
1083
1103
  `/parse-repository`.
1084
1104
 
@@ -1151,6 +1171,55 @@ For Codex, `GET /jira/codex-model-catalog?repo_name=...` is the sole tier-to-mod
1151
1171
 
1152
1172
  Per-OS prerequisites: macOS `wt`, `git`, `osascript`; Windows `git-wt`, Git for Windows / Git Bash, Windows Terminal or PowerShell; Linux `wt`, `git`, `tmux`. Set `BAPI_WORKTRUNK_BIN` to override the Worktrunk executable name/path for nonstandard installs (`doctor` honors it too). The read-only `doctor` subcommand (below) additionally surfaces a missing `uv` — Worktrunk's `pre-start` hook runs `uv`, but live preflight does not check it — and the selected agent's command; run `doctor --agent cursor-agent` to also check `cursor-agent` (it prints `cursor-agent login` as an informational auth reminder).
1153
1173
 
1174
+ ### Missing packaged workflow files
1175
+
1176
+ Run read-only `doctor` to distinguish absent, unreadable, unsafe, and uncertain
1177
+ workflow files. Healthy discovery adds no recovery prose. Confirmed loss in a
1178
+ root-bound initialized installation adds bounded recovery metadata and guidance;
1179
+ unknown hosts, fallback roots, legacy inventories, and newer bundle additions do
1180
+ not establish historical loss. Readable customized or uncommitted files count as
1181
+ present; committing generated files is unnecessary.
1182
+
1183
+ ```sh
1184
+ npx -y '@bridge_gpt/mcp-server@<running-version>' repair-assets --project-root '/path/to/project' --host claude
1185
+ ```
1186
+
1187
+ Replace `<running-version>` with the running package version. Both explicit root and host
1188
+ options authorize fill-only provisioning without inventory. Otherwise repair
1189
+ requires a matching inventory at the exact selected root; callers in a project
1190
+ subdirectory must supply `--project-root`. The canonical selected root is printed
1191
+ before writes. Unpinned `npx -y @bridge_gpt/mcp-server repair-assets` intentionally
1192
+ selects the latest package, which may introduce new assets.
1193
+
1194
+ | Host | Packaged destinations |
1195
+ | --- | --- |
1196
+ | `claude` | `.claude/commands/`, `.claude/agents/`, shipped documentation |
1197
+ | `cursor` | `.cursor/commands/`, shipped documentation; no native agent definitions |
1198
+ | `codex` | `.agents/skills/bridge-*/SKILL.md`, shipped documentation |
1199
+ | `copilot` | Independent `.github/prompts/`, `.github/skills/`, `.github/agents/`, shipped documentation |
1200
+
1201
+ Repair preserves existing bytes and concurrent creation winners. It prepares
1202
+ complete temporary files, flushes/closes them, and publishes with exclusive hard
1203
+ links. A confined Linux procfs adapter supports writes; macOS/Windows currently
1204
+ refuse missing-file writes because a qualified descriptor-relative adapter is
1205
+ unavailable. Non-files, permissions, unsafe ancestry, unsupported publication, or
1206
+ cleanup failures produce a nonzero exit and distinct diagnostics. Repair does not
1207
+ refresh or upgrade existing content.
1208
+
1209
+ When a missing host command prevents Bridge invocation, run the terminal command
1210
+ from the established root, then refresh/reconnect and run doctor. Hosts may cache
1211
+ lists or ignore notifications; healthy files do not guarantee host presentation.
1212
+ If the mismatch persists, consult host support.
1213
+
1214
+ Plans/reviews/research reports are generated outputs: retrieve identified existing
1215
+ results using `get_plan`, `wait_for_ticket_review` for eligible canonical legs,
1216
+ `get_deep_research(task_id)`, or `get_council(council_id)`. Never silently rerun paid
1217
+ generation. Agent-reviewed rewrites must be recreated and reviewed before
1218
+ publication; neither retrieval nor installer repair reconstructs them.
1219
+
1220
+ Custom pipelines/instructions, MCP registration/configuration, credentials,
1221
+ onboarding/API setup, and Windsurf are outside packaged repair.
1222
+
1154
1223
  ### `doctor`
1155
1224
 
1156
1225
  The package also ships a strictly **read-only** `doctor` subcommand — titled **`bridge doctor — read-only diagnostics`** — that diagnoses your whole Bridge install without changing anything:
@@ -1210,7 +1279,7 @@ The path from an epic to a finished run:
1210
1279
  `npx -y @bridge_gpt/mcp-server install conductor --required-check <check>`
1211
1280
  (also spelled `install-bridge conductor`; the name predates the rename). It runs
1212
1281
  a read-only doctor and writes the done gate from your required CI check(s). It
1213
- can also scaffold the `claude-review` workflow, write an executor service unit,
1282
+ can also scaffold the `claude-review` workflow (only with the explicit AI-review opt-in, `--review-policy verdict_protocol`; omitting the flag persists no repository review choice and scaffolds none), write an executor service unit,
1214
1283
  and save a launch profile. With its own consent, it adds `epic_implementer` to
1215
1284
  `BRIDGE_MCP_PROFILE` in your host MCP configs. Run `install conductor --help`
1216
1285
  for every option.
@@ -1264,7 +1333,10 @@ including every error path, ever offers you two paths.
1264
1333
  the strategy and the posture (see below). With none of them, a multi-ticket epic
1265
1334
  runs on `epic/<KEY>`, unattended. It also forwards `--repo` and the policy flags:
1266
1335
  `--policy-file <path>` (the complete run policy), `--review-policy <src>` (a
1267
- per-run review policy), and `--replace-policy` (allow replacing a live run's
1336
+ per-run review policy: `repository_policy`, `verdict_protocol`,
1337
+ `native_review_decision`, or `none`; omitted, the server stamps `repository_policy`
1338
+ at first approval for a new feature-branch run, and `verdict_protocol` is the
1339
+ explicit AI-review opt-in), and `--replace-policy` (allow replacing a live run's
1268
1340
  stored policy).
1269
1341
 
1270
1342
  **Every run gets an executor (BAPI-1279).** Once `drive-epic` creates a run, it
@@ -1953,3 +2025,94 @@ plus `total_steps`, `auto_approve`, and `execution_mode`. Each step is either an
1953
2025
  text). `execution_mode` is `inline` — the calling agent executes every step
1954
2026
  itself and keeps its own durable record through `record_phase_result` /
1955
2027
  `record_checkpoint`. There is no server-side orchestrator and no run to resume.
2028
+
2029
+
2030
+ ## Start Tickets troubleshooting
2031
+
2032
+ `start-tickets` reports actual worktree paths and branches in its stable summary,
2033
+ then explains successfully spawned sessions. Work from each reported folder: its
2034
+ branch is already checked out there and normally cannot also be checked out in
2035
+ the original folder. Folder names and locations come from Worktrunk configuration;
2036
+ do not infer them from the original checkout.
2037
+
2038
+ Monitor the selected agent in the reported Terminal/iTerm tab, Windows Terminal
2039
+ tab, PowerShell fallback window, or detached tmux session. Linux output prints
2040
+ the exact `tmux attach -t ...` commands. When a destination is not reported, treat
2041
+ it as unknown. A spawned session has started; it has not completed implementation
2042
+ or review. Review workflows review independently before opening a fresh
2043
+ implementation session. Coordinate ownership across multiple independent
2044
+ sessions and pause affected work when overlapping changes cause conflicts.
2045
+
2046
+ For mixed failures, only `spawned` rows describe running sessions. Retain failed
2047
+ row warnings and the CLI exit status. Dry-run and all-failed results open no
2048
+ successful sessions. After a failure, read-only diagnostics are allowed:
2049
+
2050
+ ```bash
2051
+ npx -y @bridge_gpt/mcp-server doctor --agent codex
2052
+ ```
2053
+
2054
+ The interactive installer separates **Required for launcher** tools from
2055
+ **Recommended diagnostics** (`uv`, selected agent, ast-grep, ripgrep, lizard).
2056
+ Missing recommendations and the **Git compatibility advisory** add no install or
2057
+ launcher admission gate. Doctor performs no automatic repair, installation, PATH
2058
+ mutation, authentication, or terminal launch. The existing launcher still checks
2059
+ Git presence and repository work-tree context at launch.
2060
+
2061
+ ### Worktrunk and Git compatibility evidence
2062
+
2063
+ The documented comparison baseline is **Worktrunk v0.80.0**, whose
2064
+ [tagged Git-version source](https://github.com/max-sixty/worktrunk/blob/v0.80.0/src/git/version.rs)
2065
+ sets the minimum to **Git 2.43.0**. This is the release-specific baseline Bridge
2066
+ recommends for this advisory, not a universal rule for every Worktrunk release or
2067
+ a requirement to install the latest Git. The onboarding report observed Git
2068
+ **2.39.5** being rejected with a **2.43.0** minimum; it did not identify the
2069
+ Worktrunk release, so that observation alone is not release verification.
2070
+
2071
+ Doctor and the installer report the resolved Git executable and numeric version
2072
+ when available, with compatible, incompatible, and unknown advisory states.
2073
+ An arbitrary nonempty `BAPI_WORKTRUNK_BIN` override has an unconfirmed release
2074
+ requirement and is not assumed compatible with this baseline. On macOS,
2075
+ installing another Git does not ensure the launcher resolves it. Verify the
2076
+ executable and version selected on PATH before changing your installation:
2077
+
2078
+ ```bash
2079
+ which git
2080
+ git --version
2081
+ ```
2082
+
2083
+ ### Saved planning work and launch readiness
2084
+
2085
+ Successful ticket/plan creation does not establish executor, policy, VCS, or
2086
+ indexing readiness. A finalized epic completion may show one bounded read-only
2087
+ `drive-epic '<EPIC>' --dry-run --json` preview. Ready means **ready at preview
2088
+ time**; a conditional cold start still needs guarded startup/live validation.
2089
+ Returned target, refusal reasons, remedies, and `availability_text` remain
2090
+ authoritative. An unavailable preview leaves readiness unconfirmed while saved
2091
+ work remains successful. Free-form plans or unresolved child keys must be
2092
+ finalized first. Actual launch retains its consent and admission checks.
2093
+
2094
+ ## Backend-owned bootstrap identity (BAPI-1438)
2095
+
2096
+ Ordinary new creation uses a friendly display label. Labels may repeat and never
2097
+ select credentials. For a scripted operator invite use `install --invite --display-name "My project"`
2098
+ and supply the invitation through the existing private input mechanism. In an
2099
+ interactive terminal the folder basename is a suggested label. Self-serve signup
2100
+ still requires emailed-code verification in an interactive terminal.
2101
+
2102
+ Use `--repo <canonical-name>` or `BAPI_REPO_NAME` for existing-key registration
2103
+ or explicit legacy creation. Existing keys cannot use `--display-name`; creation
2104
+ cannot combine that flag with a canonical selector.
2105
+
2106
+ Rerun from the original folder with the same invitation or signup method after
2107
+ an interrupted install. The original proof and label are reused; another entered
2108
+ label does not rename the recovered project. Preserve recovery storage when an
2109
+ outcome is unknown, a challenge cannot be recovered, or installation asks for support.
2110
+ Never delete possibly redeemed proof to restart. Ordinary invite tokens and
2111
+ verification codes are not stored.
2112
+
2113
+ Credential storage uses bounded exclusive locking without timeout-based stealing.
2114
+ An abandoned lock needs installation support. POSIX systems sync the containing
2115
+ directory; Windows uses file sync plus atomic replacement because portable Node
2116
+ directory handles are unavailable. A failure after rename is an uncertain durability
2117
+ outcome: the new bytes may already exist. Rerun reloads the actual store under lock;
2118
+ there is no guarantee that old pending bytes survive every failure.
@@ -1,6 +1,7 @@
1
1
  import { evaluateClaudeMcpShadowingPolicy, inspectClaudeUserConfigForMcpShadowing, resolveClaudeUserConfigPath, } from "../claude-user-config-doctor.js";
2
2
  import { createDefaultAgentCapabilitiesDeps } from "../agent-capabilities/default-deps.js";
3
3
  import { runDenyEnforcementPreflight, } from "../conductor/deny-enforcement-preflight.js";
4
+ import { CLAUDE_DISABLE_AUTO_MEMORY_ENV } from "../claude-settings.js";
4
5
  import { buildExecutorBaseWorkerEnv } from "../executor/env.js";
5
6
  import { ExecutorNamedError } from "../executor/job-errors.js";
6
7
  import { provisionExecutorDenyLayer } from "../executor/permissions.js";
@@ -267,6 +268,24 @@ export function buildClaudeWatcherNudgeMessage(liveTaskIds) {
267
268
  "background log tail), you may stop that watcher. Do not cancel, kill, or abandon any " +
268
269
  "required work in order to finish sooner.");
269
270
  }
271
+ /**
272
+ * BAPI-1395 — the nudge sent when the post-result completion window opens and
273
+ * only the worker's own background Bash is live. The executor cannot tell a
274
+ * task that merely waits (a polling loop, a `sleep`) from a genuine background
275
+ * operation, so it must not ask for blanket cancellation: only tasks that are
276
+ * merely waiting are to be stopped.
277
+ */
278
+ export function buildClaudeCompletionWindowNudgeMessage(liveTaskIds) {
279
+ const ids = liveTaskIds
280
+ .map((id) => boundedIdentifier(id))
281
+ .filter((id) => id !== null)
282
+ .slice(0, NUDGE_MAX_TASK_IDS);
283
+ const named = ids.length > 0 ? ` (task ids: ${ids.join(", ")})` : "";
284
+ return claudeStdinUserLine(`Your result was received, but background shell tasks you started are still running${named}. ` +
285
+ "Stop only the tasks of your own that are merely waiting (for example a sleep or a polling " +
286
+ "loop). Leave any background operation that is doing real work running so it can finish and " +
287
+ "report its outcome. Do not cancel, kill, or abandon required work in order to finish sooner.");
288
+ }
270
289
  // ---------------------------------------------------------------------------
271
290
  // Runtime identity probe (BAPI-1301, D4a)
272
291
  // ---------------------------------------------------------------------------
@@ -372,6 +391,13 @@ export function buildClaudeWorkerEnv(parentEnv, options = {}) {
372
391
  if (typeof token === "string") {
373
392
  env[CLAUDE_OAUTH_TOKEN_ENV] = token;
374
393
  }
394
+ // BAPI-1397 (F6) — a worker must never write the OWNER's Claude auto-memory.
395
+ // The deny-layer provisioning also writes `autoMemoryEnabled: false` into the
396
+ // worktree's settings; the environment form is set here as well because it
397
+ // wins over settings and does not depend on that file write succeeding. Set
398
+ // after the parent environment is filtered, so nothing inherited can turn it
399
+ // back on.
400
+ env[CLAUDE_DISABLE_AUTO_MEMORY_ENV] = "1";
375
401
  return env;
376
402
  }
377
403
  /**
@@ -620,6 +646,7 @@ export function createClaudeExecutorAdapter(spec, deps = {}) {
620
646
  transport: COMPLETION_EVIDENCE_TRANSPORT,
621
647
  probeRuntime: (probeDeps) => probeClaudeCompletionRuntime(spec.command, probeDeps),
622
648
  buildWatcherNudge: buildClaudeWatcherNudgeMessage,
649
+ buildCompletionWindowNudge: buildClaudeCompletionWindowNudgeMessage,
623
650
  };
624
651
  return {
625
652
  identity: {